如何在使用SingleOrDefault
查询时选择所有列的子集?例如,遵循LINQ表达式
var personid = ctx.persons.SingleOrDefault(p => p.login == currentLogin)?.personid;
将编译为SELECT TOP 1 * FROM ...
类型的查询。我想仅Select()
我感兴趣的列,例如声明产生SELECT TOP 1 personid, myColumn FROM ...
引擎盖。
请注意,该问题不一定与linked question重复。我对Single
/ SingleOrDefault
的上下文感兴趣,而不是LINQ的通用解决方案。由于明显的原因,将.SingleOrDefault()
与.Select()
链接起来 :Single<T>
会返回类型为T
(或抛出)的单个对象,但这些对象显然无法实现IEnumerable<T>
并且无法Select()
。
答案 0 :(得分:3)
var personid = ctx.persons
.Where(p => p.login == currentLogin)
.Select(p => new {Prop = p.Column, personid = p.id})
.SingleOrDefault()?.personid;
可能会奏效。