是否可以使用LINQ查询返回单个对象而不是列表?
User user = (from User u in users
where u.id == 5
select u);
答案 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.ToArray方法紧跟在索引器中,例如:
User user = (from User u in users
where u.id == 5
select u).ToArray()[0];