用List <class> </class>填充LINQ Where语句

时间:2014-01-13 14:24:04

标签: c# linq

我正在编写一个LINQ表达式来查询IQueryable。 我想在填充了我的自定义对象的List中填充我的.Where克劳斯。

internal class TheCustomClass
{
    public string Name { get; set; }
    public string Value { get; set; }
}

我希望LINQ表达式为List中的每个项添加Where子句。

动态结果看起来像这样:

var queryable = enumerable.Where(x => x["name1"] == "value1")
               .Where(x => x["name2"] == "value2")
               .Where(x => x["name3"] == "value3")
               ... and so on

1 个答案:

答案 0 :(得分:2)

TheCustomClass[] filters = ...;
var queryable = enumerable.Where(x => filters.All(f => x[f.Name] == f.Value));

或者,你可以附加一个动态数量的where子句,但这似乎是不必要的复杂。

如果您的查询是一个实际的SQL LINQ查询,这将不起作用。如果是这种情况,我会扩展这个答案。


根据评论,您需要IQueryable支持。我们必须使用提供者可以理解的查询形状:

IQueryable<Something> q = ...; //initial query
foreach (var f in filters)
 q = q.Where(x => x[f.Name] == f.Value); //apply the filters

您的查询提供程序似乎支持x[f.Name]语法。它针对的是Lucene / Solr吗?