博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2013-10-31 21:30  西西+  阅读(681)  评论(3编辑  收藏  举报

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