【发布时间】:2016-02-10 18:22:46
【问题描述】:
resultList is an IQueriable<foo> 用作具有过滤选项的网格的结果。这些过滤器之一是项目过滤器。
foo.projects 是一个字符串,它是由以逗号分隔的项目组成的字符串
示例:
foo.projects = "project1,project2,project3";
filterProjects 是List<string>
使用此代码过滤成功,但因为我使用的是 ToList(),resultList 不能再作为 IQueriable 用于分页目的
resultList = resultList.Where(x => (x.projects.Split(',').ToList().Intersect(filterProjects).Count() > 0));
我的问题是:可以在将 resultList 保持为IQueriable(不使用ToList())的同时做到这一点吗?
【问题讨论】:
-
答案可能取决于隐藏在您不透明的
IQueryable<T>后面的提供商。你在使用实体框架吗? LINQ 到 SQL?其他数据源? -
我很困惑 - 您的查询仍将返回
IQueryable,但该条件可能无法按原样转换为 SQL。是什么让您认为您没有收到IQueryable回复? -
加上
ToList应该是不必要的——Split将返回一个实现IEnumerable<string>的string[],所以你仍然可以在它上面调用Intersect。 -
你是对的。仍然,我的查询不起作用:(附加信息:LINQ to Entities 无法识别方法 'System.String[] Split(Char[])' 方法,并且此方法无法转换为存储表达式。
标签: c# linq asp.net-mvc-4