如何过滤与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])'方法,该方法不能转换为存储表达式。'

你知道怎么重写吗?

如何过滤与linq和' contains '

如果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语句,但是如果您像上面那样编写它,您应该获得相同的结果,并且它将工作。