【问题标题】:Dynamic LINQ on IEnumerable?IEnumerable 上的动态 LINQ?
【发布时间】:2009-01-27 23:56:08
【问题描述】:
假设我需要使用动态查询 (List<string> l; var x = l.Where(*dynamic query*)) 过滤通用列表
我将如何使用 LINQ 做到这一点? (目前在数据视图上使用行过滤器)
我见过posting by scott g: 但它似乎不适用于使用IEnumerable 的对象(包括通用列表)
任何人都可以提供任何想法吗?
【问题讨论】:
标签:
.net
linq
ienumerable
【解决方案1】:
假设您的意思是基于字符串的查询:动态 LINQ 库可以正常工作;先打电话给.AsQueryable():
string s = *dynamic query*
var qry = l.AsQueryable().Where(s);
这为您的列表提供了一个 IQueryable<T> 包装器,它提供对动态 LINQ 扩展方法的访问。
【解决方案2】:
您可以使用带有谓词的 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# 示例项目中。