C# 使用列表填充LINQ Where语句<;类别>;

C# 使用列表填充LINQ Where语句<;类别>;,c#,linq,C#,Linq,我正在编写一个LINQ表达式来查询IQueryable。 我想从一个充满我的自定义对象的列表中填充我的.Where claus internal class TheCustomClass { public string Name { get; set; } public string Value { get; set; } } 我希望LINQ表达式为列表中的每个项目添加Where子句 动态结果如下所示: var queryable = enumerable.Where(x =&

我正在编写一个LINQ表达式来查询IQueryable。 我想从一个充满我的自定义对象的列表中填充我的.Where claus

internal class TheCustomClass
{
    public string Name { get; set; }
    public string Value { get; set; }
}
我希望LINQ表达式为列表中的每个项目添加Where子句

动态结果如下所示:

var queryable = enumerable.Where(x => x["name1"] == "value1")
               .Where(x => x["name2"] == "value2")
               .Where(x => x["name3"] == "value3")
               ... and so on
或者,您可以附加动态数量的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
IQueryable q=//初始查询
foreach(过滤器中的var f)
q=q,其中(x=>x[f.Name]==f.Value)//应用过滤器

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

这是一个非常快的答案。我尝试了一下,得到了以下错误:“不支持的表达式节点类型:Lambda”我的代码如下所示:var queryable=linqQuery.Where(x=>x.Language==Language)。Where(x=>facets.All(f=>x[f.Name]==f.Value)).FacetOn(x=>x[“制造商”]).FacetOn(x=>x[“打包”];var results=queryable.GetResults();你在用什么?FacetOn是什么?太棒了,最后一部分做到了!感谢这是对Sitecore API的搜索,底层的搜索提供者是Lucene,但是Sitecore在一个非常好的界面中抽象了所有的搜索功能。可能有一种更简单的方法来做我一直在尝试的事情,但这是一个快速而肮脏的解决方案。
可枚举
只是一个
列表
,因为一个名为
x
定制类
实例似乎不允许索引器语法
x[str]
?或者
是可枚举的
某个嵌套集合或字典?
IQueryable<Something> q = ...; //initial query
foreach (var f in filters)
 q = q.Where(x => x[f.Name] == f.Value); //apply the filters