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

时间:2011-09-25 21:35:34

标签: .net linq

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

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

5 个答案:

答案 0 :(得分:11)

是,

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

如果查询返回多个元素,则抛出异常。

如果您只想要第一个元素:

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

当没有元素存在时,使用SingleOrDefault()和FirstOrDefault()为引用类型返回null。

答案 1 :(得分:2)

使用以下其中一项:

.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

。如果有多个匹配项,则单个()和.SingleOrDefault()将抛出异常。

答案 2 :(得分:2)

或者更简单:

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

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

答案 3 :(得分:0)

或First and FirstOrDefault。

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

答案 4 :(得分:0)

dmck是正确的 - Enumerable.Single() method将完成此任务。但是,通过设计,如果集合中有一个对象,它将抛出异常。如果你想避免抛出异常,你还有其他几个选择:

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

    User user = (from User u in users  
        where u.id == 5 
        select u).ToArray()[0];