我想使用域帐户ID作为我的主要密钥
从users表返回一行但是,当我使用singleordefault并查看其sql翻译时,它会执行整个select * from Users
我的查询是..
var user = base.SingleorDefault(t=>t.domainaccountid)
我希望这只返回一行!
答案 0 :(得分:4)
什么是base
?您是否有可能在某个时刻将其强制转移到IEnumerable<T>
,而不是IQueryable<T>
? 会导致此问题。请注意,只有在使用IQueryable<T>
时才能使用数据库组合,因此,如果您的任何方法返回了其他之外的内容,则组合将结束。
答案 1 :(得分:1)
您可以尝试Where
和FirstOrDefault
:
var user = base.Where(t => t.domainaccountid == 123).FirstOrDefault();
答案 2 :(得分:0)
尝试
var user = base.SingleorDefault(t=>t.domainaccountid==123);
答案 3 :(得分:0)
SingleOrDefault会查找唯一条目,应该这样做:
SELECT TOP 2 * FROM TABLE
它这样做,如果它找到2个结果,它将抛出一个异常,因为它不是唯一的。
如果您不关心将其作为一个独特的对象,因为您有其他措施来防止重复;或者只是不在乎你可以通过以下方式使用FirstOrDefault:
array.FirstOrDefault(x => x.id == someOtherId);
这将执行以下操作:
SELECT TOP 1 * FROM TABLE
这样可以更快地获得结果,尤其是在较大的表格中,因为它会在找到第一个结果后立即返回。