linq 如何检查列表中的第一项是否为空(使用c#)?

xjreopfe  于 2022-12-06  发布在  C#
关注(0)|答案(3)|浏览(204)

我有这个var activityGroup = context.Activity.Where(c => c.ActivityId == activityId).Select(c => c.ActivityGroupId);
如果没有ActivityGroupId“for seome reason“(仍然不知道为什么),查询将返回一个列表,其中第一项为空...我如何检查该列表是否不是null或是否有Any元素?

仅供参考

  • 我知道.Any()的存在,但由于第一项为空,因此执行.Any()将返回true
  • 如果我这样做可以吗:
if (activityGroup.Contains(null)) { // do something here }
tmb3ates

tmb3ates1#

当问题要求访问列表中的第一项时,linq中有一个函数返回列表中的第一项。
请尝试以下操作:

if (activityGroup.First() == null)

还有另一个函数FirstOrDefault(),它允许在第一项为空时处理默认值的情况。
更多关于此官方Microsoft Documentation的信息
但是,由于ActivityGroupId在第一个项目以外的其他项目中可能为null,因此您需要在where子句中检查其可为null性,如下所示:

.Where(c => c.ActivityId == activityId && c.ActivityGroupId != null)
csga3l58

csga3l582#

var activityGroup = context.Activity
  .Where(c => && c.ActivityGroupId != null && c.ActivityId == activityId)
  .Select(c => c.ActivityGroupId);
var hasActivityGroup = activityGroup.Any();

这是正确的语法,当ActivityGroupId为null时,其他建议的解决方案仍将引发null指针异常。

wa7juj8i

wa7juj8i3#

由于其中一个标签是“Entity Framework”,我建议在从数据库检索数据时使用过滤器的方法。如果您只对非空项感兴趣,可以扩展Where-子句:

var activityGroup = context.Activity
  .Where(c => c.ActivityId == activityId && c.ActivityGroupId != null)
  .Select(c => c.ActivityGroupId);
var hasActivityGroup = activityGroup.Any();

上述方法直接在数据库中进行过滤,以便仅传输包含ActivityGroupId的数据。

相关问题