Enumerable.Single和Enumerable.SingleOrDefault方法

简介:

Enumerable.Single方法,返回集合中唯一的一条记录,如果记录数不等于1就报错。

Enumerable.SingleOrDefault方法,返回集合中唯一的一条记录,如果记录数大于1报错,如果记录数等于0,则返回默认值。对于引用类型和可空类型的数据,这个默认值就是null。
有时候返回的这个null不是很方便,可以通过扩展方法,扩展一个SingleOrNew方法。
具体代码如下:
 

 
  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.          
  6.         List<test> l = new List<test>(){  
  7.         new test(),  
  8.         new test()  
  9.         };  
  10.           
  11.         var o1 = l.SingleOrNew<test>(m => m.a == 0);//匹配2个,异常  
  12.         var o2 = l.SingleOrNew<test>(m => m.a == 70);//匹配0个,返回new test()  
  13.  
  14.     }  
  15. }  
  16.  
  17. class test  
  18. {  
  19.     public int a;  
  20.     public string s;  
  21. }  
  22.  
  23. static class Extension  
  24. {  
  25.     public static T SingleOrNew<T>(this IEnumerable<T> query) where T : new()  
  26.     {  
  27.         if (query.Count() == 0)  
  28.         {  
  29.             return new T();  
  30.         }  
  31.         return query.Single();  
  32.     }  
  33.  
  34.     public static T SingleOrNew<T>(this IEnumerable<T> query, Func<T, bool> predicate) where T : new()  
  35.     {  
  36.         if (query.Count(predicate) == 0)  
  37.         {  
  38.             return new T();  
  39.         }  
  40.         return query.Single(predicate);  
  41.     }  
  42. }  

 














本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/1001731,如需转载请自行联系原作者



相关文章
|
6月前
|
JavaScript
Component name “header“ should always be multi-word
Component name “header“ should always be multi-word
913 error Component name “home“ should always be multi-word vuemulti-word-component-names
913 error Component name “home“ should always be multi-word vuemulti-word-component-names
128 0
|
搜索推荐 索引
Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别
Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别
|
JavaScript 前端开发 开发者
Component name “xxx“ should always be multi-word
Component name “xxx“ should always be multi-word
Component name “xxx“ should always be multi-word
【1121】Damn Single (25分)【set】
【1121】Damn Single (25分)【set】 【1121】Damn Single (25分)【set】
104 0
|
NoSQL Java Redis
JedisDataException: Please close pipeline or multi block before calling this method
JedisDataException: Please close pipeline or multi block before calling this method
199 0
|
数据库
Multiple Server Query Execution报The result set could not be merged..
在SQL Server中使用Multiple Server Query Execution这个功能做数据库维护或脚本发布时非常方便,昨天由于磁盘空间原因,删除清理了大量的软件和组件,结果导致SSMS客户端出了问题,重装过后,使用Multiple Server Query Execution时,出现了...
1012 0
|
Java 数据库连接
hibernate exception (cannot simultaneously fetch multiple bags)
      org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags at org.
1592 0