我怎么知道我的linq是否会返回可用的对象或空值

时间:2019-06-06 12:16:56

标签: linq return-value

我正在使用Web服务。我正在使用linq查询数据库。看似简单,但是我遇到了一个问题。这是我的代码供参考:

List<Comment> res = new List<Comment>();

using (ApplicationHistoryEntities ahe = new ApplicationHistoryEntities())
{
     res = (from columns in ahe.Comments
        where columns.NetforumId == actionuniqueid
            select columns).ToList();
}

如果数据库中没有任何条目,我的.ToList()会抛出错误吗?我可以部署它,然后尝试一下,但是我想更多地了解linq使用的机制。如果ahe.Comments数据库没有行...(从...)部分将返回什么?

我可以添加一个空引用检查,使用动态等,但我想真正理解它。

我发现了这个问题:how to know if my linq query returns null,但似乎所有答案都与实际操作方式有冲突...

示例答案:

  1. 您可以将其转换为列表,然后检查计数
  2. 最好的方法是检查列表中是否有null(无项目),请使用Any()代替count()
  3. LINQ查询永远不应返回null,并且如果结果为空,则不应获取异常。您的代码中可能有一个错误。
  4. 您可以将结果显示为列表,然后检查各项。

您可以看到为什么我质疑它的工作原理。

编辑: 最终代码如下:

List<Comment> res;
using (ApplicationHistoryEntities ahe = new ApplicationHistoryEntities())
{
    res = ahe.Comments?.Where(rowItem => rowItem.NetforumId == actionuniqueid).ToList() ??
          new List<Comment>().ToList();
}

1 个答案:

答案 0 :(得分:2)

看这个例子:

List<string> test = new List<string>();
var test1 = test.Where(x => x == "a").ToList();

如果test存在但为空,则查询返回一个空列表。如果testnull,则查询将引发错误。因此您可以按以下方式修改查询

List<string> test = new List<string>();
test = null;
var test1 = test?.Where(x => x == "a") ?? new List<string>().ToList();

查询现在是“安全的”。上面的两个示例都返回一个空列表,即test1.Count()将返回零,但将可用。

您还可以查看WhereToList的定义