短路linq查询抛出空错误

时间:2014-11-17 20:17:25

标签: c# linq entity-framework-6

我一直在努力让这个linq语句起作用。我正在使用linq查询设置搜索。我想要做的是,如果搜索为null或为空,请忽略该部分过滤。所以我设置的很多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,但它仍然表示存在空引用问题。我做错了什么?

1 个答案:

答案 0 :(得分:2)

为什么要在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());