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)
所以,我要问的是:有没有更好的方法来编写该查询,更具可读性和性能?
您正在寻找的是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)