A lot of times I need to check a statement within my LINQ-query and I wish there was a possibility of a IF statement within LINQ.
The following code is the solution to my IF problem. I use a temporary variable (let isOlderThen30) to check if a statement is true. Then in my WHERE statement I use the temporary variable in a INFLINE IF.
For this example I use my Blogger class with some data
[code language=’c#’]
public class Blogger
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public string Blog { get; set; }
}
List personList = new List{
new Blogger { FirstName = “Pieter”, LastName = “Brinkman”, Age = 27, Blog = “http://blog.newguid.net” },
new Blogger { FirstName = “Mark”, LastName = “van Aalst”, Age = 26, Blog = “http://www.markvanaalst.com” },
new Blogger { FirstName = “Bas”, LastName = “Hammendorp”, Age = 32, Blog = “http://www.hammendorp.net” }
};
[/code]
It’s kind of hard to think of a easy good example, but here it is. In this example I want to set the Age property to “Older then 30” when the Blogger is older then 30 (how useful!).
[code language=’c#’]
//If a blogger is older then set Age text to “Older then 30”
var rawList = from item in personList
let isOlderThen30 = item.Age > 30
select new
{
Name = item.FirstName,
Age = (isOlderThen30 ? “Older then 30″ : item.Age.ToString()),
};
//GENERATE OUTPUT
foreach (var item in rawList)
{
Response.Write(item.Name + ” (” + item.Age + “)
“);
}
//OUTPUT
//Pieter (27)
//Mark (26)
//Bas (Older then 30)
[/code]
Hope that the example is clear. If you have any questions let me know.
// UPDATE (3 aug 2009) //
I thought about the codeexample and offcourse you can do it shorter (but less readable with complex queries).
[code language=’c#’]
var rawList = from item in personList
select new
{
Name = item.FirstName,
Age = (item.Age > 30 ? “Older then 30” : item.Age.ToString()),
};
[/code]