【发布时间】:2011-03-17 02:26:41
【问题描述】:
我有一个页面,您可以在其中搜索人。他们可以获取所有人的列表,也可以按某些条件(例如名字或姓氏)对其进行过滤。
到目前为止,我一直在尝试使用this question 中详述的技术。
所以我的代码看起来像
string firstname=...
string lastname=...
var people=from p in People.All()
where (firstname==null || firstname.ToLower()==p.FirstName.ToLower()) &&
(lastname==null || lastname.ToLower()==p.LastName.ToLower())
select p;
在构建查询时出现空引用错误,但是当名字和姓氏都为空时。删除 where 子句可以消除错误。
为什么这不起作用? C# 是否尝试评估 where 子句每个部分的第二部分?这不应该是因为短路或对吗?
【问题讨论】:
-
只有一个高代表用户 (79k) 在这里发布了答案。那个答案是正确的。你为什么删除它?
-
'you' 在这种情况下是用户,显然删除了他们自己的答案。 IIRC,它谈到了使用 string.IsNullOrEmpty(firstname) 和 string.Equals()。我认为他删除了,因为他的回答没有解决你的实际问题,即使它有效
标签: c# linq short-circuiting