【问题标题】:short circuting linq queries thowing null error短路 linq 查询抛出空错误
【发布时间】: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


【解决方案1】:

为什么要在where 子句中加入不变量?

var ringtones = Live.Ringtones;

if (cbSeller.SelectedValue!= null)
    ringtones = ringtones.Where(x=> x.Property.SellerID 
                                     == (int)cbSeller.SelectedValue);

if (cbProperty.SelectedValue!= null)
    ringtones = ringtones.Where(x=> x.PropertyID 
                                     == (int)cbProperty.SelectedValue);

if(!string.IsNullOrEmpty(tbContentID.Text))
    ringtones.Where(x=> x.RingtoneID == ContentID)

if(!string.IsNullOrEmpty(tbContentName.Text) )
    ringtones.Where(x => x.RingtoneName == tbContentName.Text)

tvContent.LoadContent(ringtones.ToList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多