【发布时间】:2014-11-18 04:52:12
【问题描述】:
我在尝试让这个 linq 语句工作时遇到了一些麻烦。我正在使用 linq 查询设置搜索。我想要做的是,如果搜索为空或为空,让它忽略过滤的那部分。所以我设置了很多 where 子句,它们像这样将 where 子句短路:
tvContent.LoadContent(
Live.Ringtones
.Where(x => cbSeller.SelectedValue== null ||
x.Property.SellerID == (int)cbSeller.SelectedValue)
.Where(x => cbProperty.SelectedValue==null ||
x.PropertyID == (int)cbProperty.SelectedValue)
.Where(x => string.IsNullOrEmpty(tbContentID.Text) ||
x.RingtoneID == ContentID)
.Where(x => string.IsNullOrEmpty(tbContentName.Text) ||
x.RingtoneName == tbContentName.Text).ToList());
但是当我这样做时,我不断遇到空引用问题。 cbProperty, 是空的,并且 selectedValue 在我调试时确实显示为 null,但它仍然说存在 null 引用问题。我做错了什么?
【问题讨论】:
-
由于问题的性质(EF 与 Linq-To-SQL)以及答案不同的事实,我可以重新打开它。一个在互联网上搜索的人会被这个问题的好标题所吸引;如果他们看到另一个问题,可能不会意识到这可能与他们的问题有关。一般来说,尽量不要采取似乎会造成利益冲突的行动。在这种特定情况下,如果问题已被标记为重新打开,我会重新打开它。
-
@GeorgeStocker 这个问题或其答案与查询提供者无关。该行为特定于 System.LINQ 命名空间中的 LINQ 方法。如果查询提供程序尝试,它不可能改变这种行为。查询提供者完全是多余的信息。
-
@Servy 鉴于新用户可能不理解这一点;并且这个问题比另一个问题得到更好的回答;我让它打开。您可以随时将其带到 meta 并提出有关它的问题。
-
@GeorgeStocker 更好的回答?这个问题一个都回答不了!它没有解释正在发生的事情、行为是什么或如何解决问题。这只是一个代码转储,它甚至可以帮助一个人使用他们的确切代码。另一个问题解释了行为,如何解决它,并且被概括为适用于每个人的每个 LINQ 提供程序的每种情况,永远。这个问题的答案的持久价值为零。这个问题的作者可以在不真正理解发生了什么的情况下复制粘贴它,就是这样。
标签: c# linq entity-framework-6