如何“;“全选”;在具有可为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进行筛选"选项。

有没有办法在代码中使用"不过滤"选项?

如何“;“全选”;在具有可为null列的LINQ查询中

不完全确定我是否理解这个问题。根据我对上面代码的理解,你缺少了一个部分,即如果你得到一个"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;
}