【发布时间】:2020-03-12 03:57:42
【问题描述】:
我有一个使用 EF Core 的 C# 程序。
我这样获取我的记录:
List<MyEntity> candidateRecords = await myFilters.ToListAsync();
我这样构建过滤器:
IQueryable<MyEntity> myFilters = from m in context.MyEntity
select m;
if (!string.IsNullOrEmpty(criterion1))
myFilters = myFilters.Where(s => s.SomeColumn.Contains(criterion1));
if (!string.IsNullOrEmpty(criterion2))
myFilters = myFilters.Where(s => s.SomeColumn.Contains(criterion2));
...
这一切都有效。我可以选择单个值的任何标准组合,例如criterion s.Color = "Blue".
但是过滤 LIST 的所有匹配项的语法是什么?
示例(无法正常工作):
List<string> selectedNames = new List<string>() {"Huey", "Dewey", "Louie"}:
if (!string.IsNullOrEmpty(criterionX))
{
myFilters = myFilters.Where(
record => selectedNames.Contains(record.Name));
...
假设所有三个名称都有多条记录。上面的例子只会返回“Huey”的记录;没有返回“Dewey”或“Louie”的记录。
问题:
返回 ALL 列表中 EVERY 名称的匹配记录的正确 LINQ 语法是什么?
【问题讨论】:
-
selectedNames.Contains(record.Name)在我看来是正确的。您可以为您提到的“没有返回记录”行为写一个重现吗?我不明白为什么你没有匹配到“Dewey”或“Louie”。 -
.Where(x => someList.Contains(x.SomeValue))确实是正确的方法,所以我怀疑您的测试/验证中可能有其他问题。您如何确认这一点? -
select * from M Record where Record.Name in ('Huey', 'Dewey', 'Louie')看起来是否正确并返回正确的结果? 在 SQL 中
标签: c# linq entity-framework-core