linq - 我如何知道我的 linq 是否会返回可用对象或 null
问题描述
我正在开发网络服务。我正在使用 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 数据库没有行... (from...) 部分将返回什么?
我可以添加一个空引用检查,使用动态等,但我想真正理解它。
我发现了这个问题:如何知道我的 linq 查询是否返回 null,但似乎所有的答案都与它应该如何完成相冲突......
示例答案:
- 您可以将其转换为列表,然后检查计数
- 最好的方法是检查列表中是否有空(无项目)使用 Any() 而不是 count()
- LINQ 查询永远不应该返回 null,如果结果为空,您也不应该得到异常。您的代码中可能有错误。
- 您可以将结果实现为列表,然后检查项目。
你可以看到为什么我质疑它是如何工作的。
编辑:最终代码如下所示:
List<Comment> res;
using (ApplicationHistoryEntities ahe = new ApplicationHistoryEntities())
{
res = ahe.Comments?.Where(rowItem => rowItem.NetforumId == actionuniqueid).ToList() ??
new List<Comment>().ToList();
}
解决方案
看这个例子:
List<string> test = new List<string>();
var test1 = test.Where(x => x == "a").ToList();
如果test
存在但为空,则查询返回一个空列表。如果test
是null
查询将引发错误。因此,您可以按如下方式调整查询
List<string> test = new List<string>();
test = null;
var test1 = test?.Where(x => x == "a") ?? new List<string>().ToList();
查询现在是“安全的”。上述两个示例都返回一个空列表,即test1.Count()
返回零但可以使用。
推荐阅读
- c# - Datetime Arrives to Server Converted to UTC
- api - 在 Hasura 中为突变设置默认错误消息
- javascript - 如何使用拼贴组件动态加载图像以做出反应
- java - 休眠@JoinFormula,但返回多个结果(集合),如何?
- r - ggplot bar_col中的降序
- javascript - 正则表达式验证没有换行符的字符串 - 如果字符串有换行符 (\n),则忽略
- blazor - OnInitializedAsync 方法在更改查询字符串值时没有被调用
- reactjs - 如何让我的 React 表始终重置到第 1 页?
- asp.net-core - CellTemplate 和 ContentTemplate 在 Devextreme ASP.NET Core 中无法正确呈现
- ios - iOS - WKWebView 未正确添加到 iPhone 6 中的子视图