处理LINQ查询中的NULL参数

san*_*ngh 3 c# linq

假设你的LINQ查询where子句中有参数,你如何处理?

这是一个例子:

var peoples= from i in individuals
  where (string.IsNullOrEmpty(lastName) i.LastName.Equals(lastName))
  select i;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 15

试着了解幕后发生的事情:

  • 如何通过编译器翻译查询表达式
  • LINQ to Objects如何流式传输数据,以及它如何延迟执行
  • 查询如何通过IQueryable和表达式树远程执行

对两种查询表达式都很熟悉,例如

var query = from person in people
            where person.IsAdult
            select person.Name;
Run Code Online (Sandbox Code Playgroud)

和"点符号":

var query = people.Where(person => person.IsAdult)
                  .Select(person => person.Name);
Run Code Online (Sandbox Code Playgroud)

了解两者都可以让您为任何特定查询选择最易读的形式.


Eri*_*ert 10

查询表达式的结果是查询对象,而不是查询的结果.如果需要结果,可以要求查询对象开始提供结果.也就是说,当你说:

var names = from c in customers where c.City == "London" select c.Name;
Run Code Online (Sandbox Code Playgroud)

然后,names是一个查询对象,代表"让我得到伦敦所有客户的名字".这并不是记忆居住在伦敦的所有客户名单的顺序; 查询结果按需计算.直到你说:

foreach(var name in names) ...
Run Code Online (Sandbox Code Playgroud)

计算实际结果.

这意味着如果两次询问同一个查询对象的结果,答案可能会有所不同.客户列表可能在您第一次询问和第二次询问之间发生了变化.因为查询推迟获得结果,所以您总能获得新的结果.但是你有时会做两次相同的工作.


Ser*_*glu 5

101 LinQ样本您可以从MSDN的样本开始