今天小女子很是郁闷,生产上报了一个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一样