如何过滤与linq和' contains '
本文关键字:contains linq 何过滤 过滤 | 更新日期: 2023-09-27 17:54:57
我尝试根据未知数量的过滤器来过滤我的项目。
//项。statusId可为空//statusIds是一个字符串
{...
var statusIds = Convert.ToString(items["StatusId"]);//.Split(';');
results = mMaMDBEntities.MamConfigurations.Where(item =>
FilterByStatusId(statusIds, item.StatusId)).ToList();
}
return results;
}
private bool FilterByStatusId(string statusIds, int? statusId)
{
return statusIds.Contains(statusId.ToString());
}
但是我得到这个错误:LINQ to Entities does not recognize the method 'Boolean FilterByStatusId(System.String, System.Nullable
1[System.Int32])'方法,该方法不能转换为存储表达式。'
你知道怎么重写吗?
如果statusIds
是一个数组,那么您可以:
results = mMaMDBEntities.MamConfigurations
.Where(item => statusIds.Contain(item.StatusID)).ToList();
一些类似SQL Select * from table where ID in (1,2,3)
从您的代码中,您似乎有一个用分号分隔值的字符串。您可以尝试下面的方法来获得int
数组,然后在您的LINQ表达式中使用它。
var str = Convert.ToString(items["StatusId"]);//.Split(';');
// string str = "1;2;3;4;5"; //similar to this.
int temp;
int[] statusIds = str.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries)
.Select(r => int.TryParse(r, out temp) ? temp : 0)
.ToArray();
之后你可以在表达式中使用int
数组,如:
results = mMaMDBEntities.MamConfigurations
.Where(item => statusIds.Contain(item.StatusID)).ToList();
为什么不直接将谓词语句插入where子句中呢?
:
results = mMaMDBEntities.MamConfigurations.Where(item => statusIds.Contains(item.StatusId).ToList();
您可能需要将Split生成的字符串数组转换为List或IEnumerable才能使此工作。
这个异常是不言自明的,该方法不能以您编写的形式转换为SQL语句,但是如果您像上面那样编写它,您应该获得相同的结果,并且它将工作。