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

LINQ till XML - RSS Reader

9. mars 2009

Ett exempel som läser en RSS-feed med hjälp av LINQ till XML:

class RssReader
{
	//Klassen RssItem, GET & SET för egenskaperna
	public class RssItem
	{
		public string Title { get; set; }
		public string Link { get; set; }
		public string Description { get; set; }
	}

	//Statiska metoden GetFeeds som returnerar en lista
	//med RssItems
	public static List<RssItem> GetFeeds(string rssFeed)
	{
		XDocument doc = XDocument.Load(rssFeed, LoadOptions.None);

		//Hämtar alla titlar, länkar och beskrivningar som lagras i
		//RssItem objekt, som i sin tur läggs till i en lista
		//som returneras
		return (from i in doc.Descendants("channel").Elements("item")
				select new RssItem()
				{
					Title = i.Element("title").Value,
					Link = i.Element("link").Value,
					Description = i.Element("description").Value
				}).ToList();
	}

	static void Main(string[] args)
	{
		//Anropa GetFeeds som returnerar en lista med RssItems
		List<RssItem> items = GetFeeds("http://www.googled.se/syndication.axd");

		//Skriv ut titeln för alla poster i RSS:en
		foreach (RssItem item in items)
		{
			Console.WriteLine(item.Title);
		}
	}
}

Just nu värderat 4.7 av 3 människor

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

C# .NET

Lambda Expressions C#

4. mars 2009
Lambda är det som man inom .NET kallar för anonyma funktioner.

Vanlig funktion:
public int Multiplicera(Int32 x, Int32 y)
{
return x * y;
}
Skillnaden mellan en vanlig funktion och en Lambda-funktion är att Lambda-funktionen är anonym, dvs den har inget namn.

Exemplet ovan skulle med Lambda-kod se ut såhär:
(x,y) => x*y
Som ni ser så har metoden inget namn, den är anonym.

Istället för att ge funktionen ett namn kan man lagra den i en variabel:
Func<int, int, int> Multiplicera = (x, y) => x * y;
Sedan kan man kalla på lambda-funktionen som tildelar värdet til variabeln:
int produkt = Multiplicera(10, 2);
När kan Lambda vara användbart?
Om vi exempelvis har en lista med 5st tal som vi vill skriva ut. Vi vet att List<>-klassen har metoden ForEach(), så vi väljer att använda den.
List<int> nummer = new List() { 1, 2, 3, 4, 5 };

//skriver ut alla tal i listan "nummer"
nummer.ForEach(n => Console.WriteLine(n));
Koden för att utföra detta blir väldigt liten och kompakt. Många av dessa funktioner kan vi tacka LINQ för.

Just nu värderat 4.5 av 2 människor

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

C# .NET

LINQ - Language Integrated Query

25. februari 2009

Language Integrated Query, LINQ - en .NET Framework komponent som tillför query-funktionalitet till .NET-språk. LINQ har en SQL-liknande syntax.

LINQ släpptes som en del av .NET Framework 3.5 den 19e november 2007.

Language Integrated Query innehåller en mängd operatorer som kan användas för att hantera enumerarbara klasser, vektorer, XML och relationella databaser. Dock finns det vissa krav för att det skall fungera, datan måste vara inkapslad i objekt som sedan kan hanteras av LINQ.

LINQ består till grunden av ett API med tilläggsmetoder. Detta API tillhandahåller alla funktioner som krävs för att kunna skicka frågor till objekt som implementerar IQueryable (vanligtvis via ICollection samt igenom IEnumerable<T>).

Ett enkelt exempel på hur LINQ fungerar:

//lista med namn
List<String> lstNames = new List<String>();
lstNames.Add("Tommy");
lstNames.Add("Adam");
lstNames.Add("Bertil");
lstNames.Add("Henrik");
lstNames.Add("Anders");
lstNames.Add("Kalle");
lstNames.Add("Anna");

/*Använd LINQ för att läsa ut alla
 * namn från listan som börjar på "A"
 * sortera i fallande ordning
 */
var names = from n in lstNames
			where n.StartsWith("A")
			orderby n descending
			select n;

//skriv ut resultatet
foreach (String name in names)
{
	Console.WriteLine(name);
}

Ovanstående exempel kommer att skriva ut följande:

Anna 
Anders 
Adam

Just nu värderat 4.0 av 1 människor

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

C# .NET