Linq 将逗号分隔的字符串与包含字符串的列表相交,使用 Iqueriable

本文关键字:字符串 Iqueriable 使用 列表 分隔 Linq 包含 | 更新日期: 2023-09-27 18:33:57

resultList is an IQueriable<foo>用作

具有过滤选项的网格的结果。这些过滤器之一是 项目过滤器 .

foo.projects 是一个字符串,是由用逗号分隔的项目形成的字符串例:

foo.projects = "project1,project2,project3";

过滤器项目是一个List<string>

使用此代码过滤是成功的,但是因为我使用的是ToList((,结果列表不能再作为IQueriable用于分页目的

resultList = resultList.Where(x => (x.projects.Split(',').ToList().Intersect(filterProjects).Count() > 0)); 

我的问题是:可以在将resultList保留为IQueriable(不使用ToList()(的同时做到这一点吗?

Linq 将逗号分隔的字符串与包含字符串的列表相交,使用 Iqueriable

试试这个

resultList.Where(x => x.Projects.Split(',').Any(p => filterProjects.Any(fp => fp == p)))

更新

正如Mihai Labo所指出的,这不适用于LINQ to Entities,因为Split((无法转换为存储表达式。

假设筛选器名称不包含在彼此中(请参阅注释(,则可以重新设计解决方案(以处理 LINQ to Entities(,如下所示

resultList.Where(x => filterProjects.Any(fp => x.Projects.Contains(fp)))