C# ?? operatorn (null-coalescing operator)

25. mars 2009
I förra veckan fick jag ett tips om operatorn "??" (null-coalescing operator), men har inte haft tid att testa den förrän nu.

Exempel:
MinKlass objekt1;

//Vanlig if/else
MinKlass objekt2;
if(objekt1 != null)
{
  objekt2 = objekt1;
}
else
{
  objekt2 = new MinKlass();
}

//Smidig lösning med ?: operatorn
MinKlass objekt2 = objekt1 != null ? objekt1 : new MinKlass();

//Lösning med ?? operatorn
//Om objekt1 inte är null, så returneras den vänstra delen, 
//annars den högra, som i dethär fallet skapar en ny instans.
MinKlass objekt2 = objekt1 ?? new MinKlass();

Just nu värderat 3.5 av 2 människor

  • Currently 3,5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

C# .NET

LINQ to SQL - GridView Paging

25. mars 2009
LINQ to SQL - GridView Paging

Under dagen så fick jag en idé om att använda LINQ to SQL som datasource för en GridView, dock kom jag på att man måste sköta paging:en själv vilket är mycket smidigt med LINQ.

Koden nedan beskriver hur enkelt det är:
NorthwindDataContext db = new NorthwindDataContext();
StringBuilder sb = new StringBuilder();

int start = 0;

if (!string.IsNullOrEmpty(Request.QueryString["page"]))
{
	start = int.Parse(Request.QueryString["page"]);
}

var customers = from c in db.Customers
				select new
				{
					ID = c.CustomerID,
					Company = c.CompanyName,
					Adress = c.Address,
					Country = c.Country 
				};

int totalCustomers = customers.Count();
int pageSize = 10;
int totalPages = totalCustomers / pageSize;

if (totalCustomers % 10 > 0)
{
	totalPages += 1;
}

for (int i = 0; i < totalPages; i++)
{
	int pagingNumber = i + 1;

	sb.Append("<a href=\"Default.aspx?page=" + pageSize * i + "\">"
		+ pagingNumber.ToString() + "</a>&nbsp;");
}

Label1.Text = "Page: " + sb.ToString();

GridView1.DataSource = customers.Skip(start).Take(pageSize);
GridView1.DataBind();

Just nu värderat 5.0 av 2 människor

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

C# .NET

Laddningstider - Webbläsare

23. mars 2009
Det spelar ingen roll vilka resultat olika webbläsare får från diverse javascripttester, det är laddningstiden för en webbsida som räknas, och då är det fler faktorer är javascriptmotorn som har betydelse.

En annan detalj som jag lägger stor vikt vid är utseende, verktyg och funktionalitet. Designen skall vara tilltalande samtidigt som det skall finnas ett stort utbud av verktyg/plugins. Sist men inte minst, funktionaliteten, saker och ting skall fungera och inte låsa sig eller krascha när fel uppstår.

För mig faller det naturligt att använda Firefox, det finns stöd för oerhört många plugins och verktyg samtidigt som den är hyffsat stabil. Dock börjar jag att gilla Google Chrome alltmer då den är så snabb och underbar att surfa med.

Installerade Internet Explorer 8 igår, då jag kört RC1 en längre tid och fick nu äntligen installera fullversionen. Det första som jag möttes av var ett meddelande som säger: "Your browser is outdated. Stop living in the past and upgrade". Upptäckte att det är flera webbsidor som tolkar IE8 som version IE6.


Webbläsartestet är från idg.se och enligt dem utfördes detta test på en Lenovo X300 Thinkpad med 100 Mbit/s uppkoppling.

Tider för webbläsare med tömt cache:

  Firefox 3.07 Google Chrome 1.0 Internet Explorer 8 Opera 9.64 Safari 3.2.2
MSN.se 3s 4s 3s 4s 6s
Aftonbladet.se 10s 4s 5s 11s 4s
Hitta.se 2s 2s 2s 1s 1s
Expressen.se 10s 4s 7s 13s 4s
Svt.se 10s 8s 9s 7s 7s

Just nu värderat 3.0 av 2 människor

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Allmänt

Internet Explorer 8 - Snabbare än Firefox 3 och Google Chrome 1.0.

15. mars 2009

Internet Explorer 8 - Snabbare än Firefox 3 och Google Chrome 1.0.

Nu har Microsoft släppt en rapport som bevisar att Internet Explorer 8 är snabbare än både Firefox 3 och Google Chrome 1.0.

Enligt rapporten så är IE8 hela 3 gånger snabbare än sina största konkurrenter.

Det test som bevisar detta baserades på hur lång tid det tog att ladda de 25 vanligaste webbplatserna på internet.

Det spekuleras bland många att denna rapport är den första i en kampanj som skall övertyga både användare och webbutvecklare, att Internet Explorer 8 är att räkna med.

Hur mycket det är som stämmer i denna rapport får vi se när IE8 släpps i skarp version, vilket förväntas ske i nästa vecka.

Videon där Internet Explorer 8 presenteras: http://www.microsoft.com/windows/internet-explorer/beta/videos.aspx?vindex=14

Just nu värderat 4.0 av 4 människor

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Allmänt

XPath - XML Path Language

11. mars 2009

Xpath är ett språk som används för att definiera delar av ett XML dokument, man använder uttryck för att navigera inom dokumentet.

Xpath består av ett bibliotek med standardfunktioner samt är en mycket viktig del inom XSLT, som används för att transformera XML visuellt.

Man kan med enkla uttryck lokalisera element, attribut och innehåll i ett XML-dokument, som man kanske vill hämta eller bearbeta på något sätt.

Exempel på ett enkelt XML-dokument:

<?xml version="1.0" encoding="ISO-8859-1"?>
<books>
<book>
  <title lang="eng">Applying UML And Patterns</title>
  <price>330</price>
  <author>Craig Larman</author>
</book>
<book>
  <title lang="eng">C# Patterns</title>
  <price>432</price>
  <author>Craig Larman</author>
</book>
</books>

 Xpath uttryck för att hämta noder:

/    Utgår från rot-noden, hämtar alla
//    Utgår från den aktuella noden, hämtar alla oberoende av matchning
.    Hämtar den aktuella noden
..    Hämtar föräldern till den aktella noden
@    Hämtar attribut

Exempel:
//book    Hämtar alla book-element, oavsett var de finns i dokumentet
//@lang    Hämtar alla attribut som heter lang

Xpath predikat

/books/book[2]                Hämtar det andra book-elementet som är ett barn till books.
/books/book[last()]            Hämtar det sista book-elementet som är ett barn till books.
//title[@lang='eng']        Hämtar alla title-element med attributet lang, och värdet eng.
/books/book[price>400]        Hämtar alla book-element som har ett pris som är mindre än 400.

Xpath wildcards (hämta okända noder)

*        Matchar alla noder
@*        Matchar alla attribut
node()    Matchar alla noder av alla slag

Exempel:
/books/*    Hämta alla noder som är barn till books
//*            Hämta alla element i dokumentet
//title[@*]    Hämta alla title-element som har ett attribut

Relationer mellan noder

Parent
Alla element och attribut har en förälder. I exemplet ovan är book förälder till title, author, price och lang.

Children
Element noder kan ha noll, en eller flera barn-noder. I exemplet ovan är title, price och author barn till book.

Siblings
Noder som har samma förälder, syskon. I exemplet ovan så är author, price och title syskon.

Ancestors
En nods förälder, förälder-nodens förälder etc. book är förälder til author, books är förälder till book.

Descendants
En nods barn, barnens barn. Book, author, price och title är barn till books.

Exempel:

child::book         Hämtar alla book-noder som är barn till den aktuella noden
attribute::lang        Hämtar alla lang-attribut för den aktuella noden
child::*            Hämtar alla barn till den aktuella noden
attribute::*        Hämtar alla attribut för den aktuella noden
descendant::book    Hämtar alla barn och barnbarn till den aktuella noden

 

Just nu värderat 4.2 av 6 människor

  • Currently 4,166667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

XML