linq SingleorDefault

时间:2010-10-25 09:38:27

标签: c# sql linq

我想使用域帐户ID作为我的主要密钥

从users表返回一行

但是,当我使用singleordefault并查看其sql翻译时,它会执行整个select * from Users

我的查询是..

var user = base.SingleorDefault(t=>t.domainaccountid)

我希望这只返回一行!

4 个答案:

答案 0 :(得分:4)

什么是base?您是否有可能在某个时刻将其强制转移到IEnumerable<T>,而不是IQueryable<T> 会导致此问题。请注意,只有在使用IQueryable<T>时才能使用数据库组合,因此,如果您的任何方法返回了其他之外的内容,则组合将结束。

答案 1 :(得分:1)

您可以尝试WhereFirstOrDefault

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

这样可以更快地获得结果,尤其是在较大的表格中,因为它会在找到第一个结果后立即返回。