如何“;“全选”;在具有可为null列的LINQ查询中
本文关键字:列的 null LINQ 查询 全选 如何 | 更新日期: 2023-09-27 17:58:07
这需要一些设置来解释。我知道数据库中的"null是坏的",我也在经历为什么会这样,但我对业务使用数据源的方式别无选择。数据源在数据集中有null,我必须按原样处理它。(希望这能解决预期的"好吧,你的数据集不应该有null…"或"你为什么不删除null…?")
假设我有这样的样本集,其中"NULL"是一个实际的NULL:
Campus | Name | Relationship --------------------------------- A | Bob | Relationship 1 B | Bill | NULL B | Carol | Relationship 2 C | Sally | Relationship 1
现在假设我使用一个选项列表,通过Relationship
列中的值的不同列表来过滤结果:
- 全部(表示显示所有记录)
- NULL
- 关系1
- 关系2
如果我没有"全部"选项,那就足够简单了:
private IEnumerable<RwsBasePhonesAndAddress> PopulateQuery(string SelectedCampus,
string SelectedRelationship)
{
IEnumerable<RwsBasePhonesAndAddress> query =
db.RwsBasePhonesAndAddresses.Where(m => m.Campus == SelectedCampus);
if (!string.IsNullOrEmpty(SelectedRelationship))
query = query.Where(m => m.Relationship == SelectedRelationship);
else
query = query.Where(m => m.Relationship == null);
query = query.OrderBy(m => m.StudentName).AsEnumerable();
return query;
}
我已经验证了编写的代码返回的结果与"SelectedRelationship"参数匹配,包括当选择"NULL"作为筛选器时的"NULL"记录。
正是将"全部"包含在选项列表中使这项工作变得困难。如果"Relationship"列没有null,我可以使用null SelectedRelationship
参数作为"不按SelectedRelationship进行筛选"选项。
有没有办法在代码中使用"不过滤"选项?
不完全确定我是否理解这个问题。根据我对上面代码的理解,你缺少了一个部分,即如果你得到一个"All"值,那么就不要过滤掉任何东西。正确的如果是:
private IEnumerable<RwsBasePhonesAndAddress> PopulateQuery(string SelectedCampus,
string SelectedRelationship)
{
IEnumerable<RwsBasePhonesAndAddress> query =
db.RwsBasePhonesAndAddresses.Where(m => m.Campus == SelectedCampus);
if(string.IsNullOrEmpty(SelectedRelationship))
query = query.Where(m => m.Relationship == null);
else if (SelectedRelationship != "All")
query = query.Where(m => m.Relationship == SelectedRelationship);
query = query.OrderBy(m => m.StudentName).AsEnumerable();
return query;
}