我正在编写一个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
答案 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吗?