IList<T>之 First【学习笔记之Linq】

今天小女子很是郁闷,生产上报了一个bug,之前都未测试到。异常信息如下:

System.InvalidOperationException Sequence contains no matching element
Stack Trace : 
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source, Func`2 predicate)
   at Package.Vendor.VBooking.Business.PriceInventoryProcess.GetMonthPriceInventoryList......

检查跟踪后发现是下面这段代码出的问题。

RealInventoryDetailInfo realInventory = realInventoryList.First(i => i.InventoryDate == dt);

乍一看并无不妥,后查资料后才发现应该要用FirstOrDefault,改之。解决!

区别下First与FirstOrDefault方法

1) First 方法是必须返回序列中满足条件的第一个元素。若找不到则抛异常InvalidOperationException。正是小女子现在遇到的问题。

2) FirstOrDefault 若在序列中查询不到满足条件的第一个元素则返回默认值

顺便扩展下Single和SingleOrDefault

Single 返回序列中的唯一一个元素,如果序列中不包含该元素则会抛InvalidOperationException 异常

情况同以上Single和SingleOrDefault一样

原文地址:https://www.cnblogs.com/xi-xi/p/3400244.html