检查 ID 列表是否有效的更好方法(EF Core)

Str*_*lfa 2 c# linq entity-framework-core

我在 html 页面中有一个复选框元素列表,所有元素都可以选择并且具有不同的 ID,并且它的 ID 通过 HTTP POST 发送到我的 API。为了安全起见,我需要检查是否有任何发送的 ID 无效。它只是一种方法,如果我的数据库中不存在这些 ID 中的任何一个,则返回 false,如果所有这些 ID 都存在,则返回 true。

最初看起来很简单,但我没有找到直接使用 EF Core 从我的数据库返回该结果的方法。我总是需要将Count我的查询结果与我的列表进行比较Count

我更好的方法是:

public async Task<bool> IsIdListValid(IEnumerable<int> idList) =>
   (await _context.Foo
              .Select(x => x.Id)
              .CountAsync(id => idList.Contains(id))
   ) == idList.Distinct().Count();
Run Code Online (Sandbox Code Playgroud)

所以,我要问的是:有没有更好的方法来编写该查询,更具可读性和性能?

SO *_*ood 5

您正在寻找的是All

public async Task<bool> IsIdListValid(IEnumerable<int> idList)  
{
   var validIds = await _context.Foo.Select(x => x.Id).ToListAsync();
   return idList.All(x => validIds.Contains(x));
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么您认为选择所有 id 比使用过滤条件进行计数更好? (2认同)