.Net-LINQ查询返回单个对象?

.Net-LINQ查询返回单个对象?,.net,linq,.net,Linq,是否可以使用LINQ查询返回单个对象而不是列表 User user = (from User u in users where u.id == 5 select u); 对 如果查询返回多个元素,则会引发异常 如果只需要第一个元素: User user = (from User u in users where u.id == 5 select u).First() 使用SingleOrDefault()和FirstOrDefault()在不存在元素时

是否可以使用LINQ查询返回单个对象而不是列表

User user = (from User u in users 
     where u.id == 5
     select u);

如果查询返回多个元素,则会引发异常

如果只需要第一个元素:

User user = (from User u in users 
    where u.id == 5
    select u).First()
使用SingleOrDefault()和FirstOrDefault()在不存在元素时返回null作为引用类型。

使用以下任一项:

.Single() // return a single
.SingleOrDefault() // return a single or the default value if there are no matches
.First() // return the first object it encounters that matches
.FirstOrDefault() // return the first object it encounters that matches, or the default value if no matches

如果存在多个匹配项,.Single()和.SingleOrDefault()将引发异常。

或者更简单一些:

User user = users.Single(u => u.id == 5);

如果查询返回多个元素,则需要使用
First
,因为
Single
会在查询中有多个元素时引发异常。

或First和FirstOrDefault

User user = (from User u in users 
     where u.id == 5
     select u).FirstOrDefault();
dmck是正确的,它将实现这一点。但是,根据设计,如果集合中有多个对象,它将抛出异常。如果要避免引发异常,您还有几个其他选项:

  • 方法
  • 紧跟在索引器中的Enumerable.ToArray方法,例如:

    User user = (from User u in users  
        where u.id == 5 
        select u).ToArray()[0];
    
SingleOrDefault()
FirstOrDefault()
将返回默认值。对于值类型,这不是
null
,而是特定值类型的默认值。
User user = (from User u in users  
    where u.id == 5 
    select u).ToArray()[0];