如何使用可空列在LINQ查询中“全选”

时间:2016-07-20 19:45:03

标签: c# linq

这需要一些设置来解释。我知道数据库中的“nulls是坏的”,我遇到了为什么会这样,但我没有选择业务使用数据源的方式。数据源在数据集中有空值,我必须按原样使用它。 (希望这能解决预期的“好吧,你的数据集不应该有空...”或“你为什么不删除空值......?”

假设我有这样的样本集,其中“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 SelectedRelationship参数作为“不要过滤'SelectedRelationship'”选项。

有什么方法可以在代码中使用“不过滤”选项吗?

1 个答案:

答案 0 :(得分:2)

不完全确定我理解这个问题。从我的理解到上面的代码,你错过了如果你得到一个&#34; All&#34;价值然后不过滤掉任何东西。对?如果是这样的话:

PendingIntent