【发布时间】:2021-10-08 04:54:05
【问题描述】:
我有一个带有字符串/varchar 属性的表。
我的方法接受一个字符串,可以是逗号分隔的列表。
我的目标是构建一个动态的 where 子句,它将遍历逗号分隔的列表并使用我的查询创建一个 where 子句,但我的语法不正确。
public async List<DataObj> GetData(string pets)
{
IQueryable<DataObj> query = dbSet;
if (!string.IsNullOrEmpty(pets))
{
var split = pets.Split(",");
foreach (var t in split)
{
query = query.Where(x => x.Pets.Contains(t.Trim()));
}
}
return await query.DataObj.AsNoTracking().ToListAsync();
}
因此,如果一条记录的 DataObj.Pets 是“狗,猫”。而 DataObj.Pets 的另一条记录是:“狗,鸟”。
如果我输入“birds”作为 repo 的参数,它应该返回 DataObj2,如果我输入“dog”,它应该返回两者,如果我输入“dog,birds”,查询应该返回两者DataObj1 和 DataObj2。
我的查询有什么问题吗,因为它没有这样做。
【问题讨论】:
-
因为它没有那样做。 - 你能说出它在做什么吗,你有什么错误吗?
-
您的要求是
Or条件,通过链接您正在使用And条件的Where表达式 -
在实体框架中链接
.Where()子句AND。相关:How to chain alternative conditions in where clause in Entity Framework
标签: entity-framework linq entity-framework-core