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
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" }
};
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!).
//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)
Hope that the example is clear. If you have any questions let me know. // UPDATE (3 aug 2009) // I thought about the codeexample and of course you can do it shorter (but less readable with complex queries).
var rawList = from item in personList select new {
Name = item.FirstName, Age = (item.Age > 30 ? "Older then 30" : item.Age.ToString()), };