我一直在努力让这个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,但它仍然表示存在空引用问题。我做错了什么?
答案 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());