首页 > 解决方案 > Entity Framework Core - 按值列表过滤

问题描述

我正在寻找一种方法来基于 EF Core 中的过滤器列表使用连接的 OR 语句来实现 SQL 查询。在 SQL 中,它看起来就像:

SELECT *
FROM Table
WHERE (ColA = 'filterForA1' AND ColB = 'filterForB1') OR [...] OR (ColA = 'filterForAx' AND ColB = 'filterForBx')

因此,获取 SQL 查询并执行它的一种天真的方法FromSqlRaw是:

string sqlFilter = "";
bool first = true;
foreach (var filterSet in filterSets) {
  if (!first) { sqlFilter += "OR" } else { first = false; }

  sqlFilter += $"(ColA = '{filterSet.A}' AND ColB = '{filterSet.B}')";
}

但这会使代码容易受到注入的影响,所以我想知道是否有更好的解决方案来处理 EF Core 中的过滤器列表?

编辑:LINQ 查询也是一个很好的解决方案。但我不知道如何使用 LINQ 来做到这一点。所以上面的 SQL 查询只是结果应该是什么样子的示例。

标签: c#entity-framework-core

解决方案


推荐阅读