IEnumerable上的动态LINQ?

时间:2009-01-27 23:56:09

标签: .net linq ienumerable

假设我需要使用动态查询(List<string> l; var x = l.Where(*dynamic query*)

过滤通用列表

我如何使用LINQ执行此操作? (目前在数据视图上使用行过滤器)

我见过posting by scott g:但它似乎不适用于使用IEnumerable的对象(包括通用列表)

任何人都可以提出任何想法吗?

2 个答案:

答案 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#样本项目内。