假设您在LINQ查询where子句中有参数,您如何处理?
以下是一个例子:
var peoples= from i in individuals
where (string.IsNullOrEmpty(lastName) i.LastName.Equals(lastName))
select i;
答案 0 :(得分:15)
尝试了解幕后发生的事情:
同样值得熟悉两种查询表达式,例如
var query = from person in people
where person.IsAdult
select person.Name;
和“点符号”:
var query = people.Where(person => person.IsAdult)
.Select(person => person.Name);
了解两者都可以让您为任何特定查询选择最易读的形式。
答案 1 :(得分:10)
查询表达式的结果是查询对象,而不是查询的结果。如果需要结果,可以要求查询对象开始提供结果。也就是说,当你说:
var names = from c in customers where c.City == "London" select c.Name;
然后,名称是一个查询对象,代表“让我得到伦敦所有客户的名字”。它不是不是记忆中所有居住在伦敦的客户的名字;查询结果按需计算。直到你说:
foreach(var name in names) ...
计算实际结果。
这意味着如果两次询问同一个查询对象的结果,答案可能会有所不同。客户列表可能在您第一次询问和第二次询问之间发生了变化。因为查询推迟获得结果,所以您总能得到新的结果。但是你有时会做两次相同的工作。
答案 2 :(得分:5)
101 LinQ Samples您可以从MSDN的样本开始
答案 3 :(得分:2)
我可以为LINQ
开头的人提供的最佳建议是LINQPad
。它是一个非常宝贵的工具,可以显着加快您的学习过程。它附带了大量的示例,可以演示并让您使用所有LINQ
运算符。
答案 4 :(得分:2)
你在LINQ中这样做,就像在"正常" C#。
在您的示例中,您使用了string.IsNullOrEmpty(),因此您不必区分null和""。如果是这样的话,你可以写一下......如下:
if ((lastName ?? "") == (i.LastName ?? ""))
{
// equal
}
您可以将该逻辑集成到LINQ查询中,如下所示:
var peoples = from i in individuals
where (lastName ?? "") == (i.LastName ?? "")
select i;