LINQ中的DefaultIfEmpty

Nat*_*Pet 36 .net linq

有人可以解释如何DefaultIfEmpty()LINQ中使用.我准备了一些材料,但仍然需要一些坚实的东西来看看它的用途.

vc *_* 74 37

它基本上返回一个带有单个元素的集合,以防源集合为空.

var numbers = new int[] {1, 2, 3};
var aNumber = numbers.First();
Run Code Online (Sandbox Code Playgroud)

返回1

var numbers = new int[];
var aNumber = numbers.DefaultIfEmpty(12).Single();
Run Code Online (Sandbox Code Playgroud)

当集合为空时返回12

  • @ vc74:第一个`DefaultIfEmpty`意味着`FirstOrDefault`(在你的评论中)? (5认同)
  • DefaultIfEmpty返回一个元素,而DefaultIfEmpty返回一个集合,然后可以将其级联到链中的另一个linq操作. (3认同)

小智 7

不同之处在于,当FirstOrDefault返回一个对象时,DefaultIfEmpty返回一个对象集合.如果没有找到结果,则DefaultIfEmpty仍返回一个具有默认值的单个项的Enumerable,而FirstOrDefault返回T本身.

如果需要始终需要集合结果,则使用DefaultIfEmpty,例如创建外部联接.如果您总是需要对象(而不是集合)结果,则使用FirstOrDefault,例如,如果您想在搜索ID或唯一电子邮件等内容时获取第一个项目(或仅限项目),并且想要返回默认的空项目如果找不到您要搜索的项目.