我对行的内容不感兴趣,我只想知道是否存在行.该Name
列是主键,因此将有0或1个匹配的行.目前,我正在使用:
if ((from u in dc.Users where u.Name == name select u).Count() > 0) // row exists else // row doesn't exist
虽然上述工作,但通过选择行的所有内容(如果存在),它会做很多不必要的工作.以下是否创建更快的查询:
if (dc.Users.Where(u => u.Name == name).Any())
...或者是否有更快的查询?
这种Count()
方法可以做额外的工作,如(在TSQL中)EXISTS
或TOP 1
通常更快; db可以优化"至少有一行".就个人而言,我会使用any/predicate重载:
if (dc.Users.Any(u => u.Name == name)) {...}
当然,你可以通过观察TSQL来比较每个人做的事情:
dc.Log = Console.Out;
当然
if (dc.Users.Where(u => u.Name == name).Any())
这是最好的,如果要检查多个条件,那么写起来非常简单
假设您要检查公司的用户
if (dc.Users.Where(u => u.ID== Id && u.Company==company).Any())