我如何在使用 linq 到实体查询的位置之间添加 OR?
How do i add OR in between where using linq to entity query?
我想在 linq 中使用 OR 从同一列中搜索多个值。在SQL中是这样的:
var query = "Select * from table where id = 1";
query += "OR where id = 2";
id 来自一个 id 数组,所以我将 id 传递给一个变量并循环它。数组中的 id 数量不固定,取决于用户通过选中 table 中的复选框选择的 id 数量。因为如果我像下面那样做,它将 return null 因为它有点将我的 where 查询解释为 AND。我如何更改它以便它从所有 id 中获取行(使用 OR)?
Request request = db.Requests;
var selectedIdList = new List<string>(arrId);
if (arrId.Length > 0)
{
for (var item = 0; item <= selectedIdList.Count() - 1; item++)
{
var detailId = Convert.ToInt32(selectedIdList[item]);
request = request.Where(y => y.Id == detailId);
}
}
只需在 Where[ 中将 ||
用于 OR,将 &&
用于 AND =24=]
但我更喜欢:
request.Where(y => selectedIdList.Contains(y.Id));
如果 selectedIdList 是字符串数组:
request.Where(y => selectedIdList.Contains(y.Id.ToString());
您可以使用 LinqKit。 Linqkit 提供动态创建谓词的东西
只需使用 packageManager 安装 linqKit,并使用 predicateBuilder 构建谓词
var predicate = PredicateBuilder.True<Patient>();
predicate=predicate.And(...)
或
predicate=predicate.Or(...)
然后在你的 where 子句中使用谓词
通过这种方式,您可以像在动态 SQL
中那样(动态地)创建 Or
您可以从此处获取更多详细信息
https://www.c-sharpcorner.com/UploadFile/c42694/dynamic-query-in-linq-using-predicate-builder/
我想在 linq 中使用 OR 从同一列中搜索多个值。在SQL中是这样的:
var query = "Select * from table where id = 1";
query += "OR where id = 2";
id 来自一个 id 数组,所以我将 id 传递给一个变量并循环它。数组中的 id 数量不固定,取决于用户通过选中 table 中的复选框选择的 id 数量。因为如果我像下面那样做,它将 return null 因为它有点将我的 where 查询解释为 AND。我如何更改它以便它从所有 id 中获取行(使用 OR)?
Request request = db.Requests;
var selectedIdList = new List<string>(arrId);
if (arrId.Length > 0)
{
for (var item = 0; item <= selectedIdList.Count() - 1; item++)
{
var detailId = Convert.ToInt32(selectedIdList[item]);
request = request.Where(y => y.Id == detailId);
}
}
只需在 Where[ 中将 ||
用于 OR,将 &&
用于 AND =24=]
但我更喜欢:
request.Where(y => selectedIdList.Contains(y.Id));
如果 selectedIdList 是字符串数组:
request.Where(y => selectedIdList.Contains(y.Id.ToString());
您可以使用 LinqKit。 Linqkit 提供动态创建谓词的东西
只需使用 packageManager 安装 linqKit,并使用 predicateBuilder 构建谓词
var predicate = PredicateBuilder.True<Patient>();
predicate=predicate.And(...)
或
predicate=predicate.Or(...)
然后在你的 where 子句中使用谓词
通过这种方式,您可以像在动态 SQL
中那样(动态地)创建 Or您可以从此处获取更多详细信息 https://www.c-sharpcorner.com/UploadFile/c42694/dynamic-query-in-linq-using-predicate-builder/