假设我需要使用动态查询(List<string> l; var x = l.Where(*dynamic query*)
)
我如何使用LINQ执行此操作? (目前在数据视图上使用行过滤器)
我见过posting by scott g:但它似乎不适用于使用IEnumerable
的对象(包括通用列表)
任何人都可以提出任何想法吗?
答案 0 :(得分:15)
假设您的意思是基于字符串的查询:动态LINQ库将正常工作;只需先致电.AsQueryable()
:
string s = *dynamic query*
var qry = l.AsQueryable().Where(s);
这为您提供了一个围绕列表的IQueryable<T>
包装器,它提供了对动态LINQ扩展方法的访问。
答案 1 :(得分:3)
您可以使用带有谓词的FindAll()方法。这是一个基本的例子。
List<string> stringList = new List<string>(new string[]{"Smith", "Johnson", "Jordan","Doe"});
List<string> filteredStringList = stringList.FindAll(x => x == "Smith");
Find方法也返回一个项目。
MSDN上还有一个示例项目,用于在IEnumerable和IQueryable上执行动态LINQ查询。您可以从中重用DynamicQueryable类。这是link。该项目位于C#样本项目内。