LINQ中的DefaultIfEmpty

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

如果源集合是空的,它基本上返回一个具有单个元素的集合。

 var numbers = new int[] {1, 2, 3}; var aNumber = numbers.First(); 

返回1

 var numbers = new int[]; var aNumber = numbers.DefaultIfEmpty(12).Single(); 

返回12,因为集合是空的

不同的是,DefaultIfEmpty返回一个对象集合,而FirstOrDefault返回一个对象。 如果没有find结果,则DefaultIfEmpty仍然返回具有其默认值的单个项目的Enumerable,而FirstOrDefault返回T本身。

如果您需要总是需要收集结果,例如创build外连接,则使用DefaultIfEmpty。 如果您始终需要一个对象(而不是集合)结果,则使用FirstOrDefault,例如,如果要在search某个ID或唯一电子邮件之类的项目时获取第一个项目(或唯一项目),并且要返回默认的空项目如果您正在search的项目没有find。