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()
(的同时做到这一点吗?
试试这个
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)))