在LINQ to SQL中返回结果集之前检查是否存在记录

Geo*_*ton 10 .net c# linq linq-to-sql

我正在寻找一个简单的解决方案来替换我的标准化垃圾方式,在尝试检索数据之前验证记录是否存在.目前,无论何时调用我的一个方法,我都会做一些事情......

private Record DoSomething(int id)
{
   if(data.Records.Count(q=>q.Id==id) > 0)
   {
      return data.Records.First(q=>q.Id==id);
   }
   return null;
}
Run Code Online (Sandbox Code Playgroud)

...我总是检查记录的数量,以确定记录的存在.必须有一种更"优雅"的方式来做这件事,而不必两次调用数据库.有办法吗?

jas*_*son 16

有很多干净的方法来处理这个问题.如果你想要第一个Record对应id你可以说:

Record record = data.Records.FirstOrDefault(r => r.Id == id);
if(record != null) {
    // record exists
}
else {
    // record does not exist
}
Run Code Online (Sandbox Code Playgroud)

如果您只想知道是否Record存在:

return data.Records.Any(r => r.Id == id); // true if exists
Run Code Online (Sandbox Code Playgroud)

如果你想要计算Record存在多少这样的数量:

return data.Records.Count(r => r.Id == id);
Run Code Online (Sandbox Code Playgroud)

如果你想要一个IEnumerable<Record>所有这样的枚举()Record:

return data.Records.Where(r => r.Id == id);
Run Code Online (Sandbox Code Playgroud)

  • `任意(r => r.Id == id)`是首选,因为它更有效(将导致'EXISTS`而不是'COUNT`). (2认同)