C# 动态构建Linq“;其中;条款

C# 动态构建Linq“;其中;条款,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我试图通过编写额外的代码行来做一些常规的事情。我在这个网站上看到了一些解决我问题的例子,但我仍然不能把所有的部分放在一起解决我试图实现的问题 以下是我尝试执行的伪代码: list<t> searchTerms; class t { string columnName; string columnValue ; string columnType ; string FilterType; } 我想做的是使用lambda表达式/反射来实现以下功能: SearchTerm t = t

我试图通过编写额外的代码行来做一些常规的事情。我在这个网站上看到了一些解决我问题的例子,但我仍然不能把所有的部分放在一起解决我试图实现的问题

以下是我尝试执行的伪代码:

list<t> searchTerms;

class t
{
string columnName;
string columnValue ;
string columnType ;
 string FilterType;
}
我想做的是使用lambda表达式/反射来实现以下功能:

SearchTerm t = terms.Find(term => term.ColumnValue == "PartNo");
if (t != null)
{
  switch (t.FilterType)
  {
    case FilterType.Contains:
      q = q.Where(c => c.PartNo.Contains(t.Value));
      break;

    case FilterType.EqualTo:
      q = q.Where(c => c.PartNo.Equals(t.Value));
      break;

    case FilterType.StartsWith:
      q = q.Where(c => c.PartNo.StartsWith(t.Value));
      break;
  }
}

t = terms.Find(term => term.ColumnValue == "ItemDesc");
if (t != null)
{
  switch (t.FilterType)
  {
    case FilterType.Contains:
      q = q.Where(c => c.ItemDesc.Contains(t.Value));
      break;

    case FilterType.EqualTo:
      q = q.Where(c => c.ItemDesc.Equals(t.Value));
      break;

    case FilterType.StartsWith:
      q = q.Where(c => c.ItemDesc.StartsWith(t.Value));
      break;
  }
}
q.whereJoinExpression(searchTerms.ToLamdaExpression());
在哪里 searchTerms.ToLamdaExpression()

应该返回where子句的输入,即Expression>。 及 其中joinexpression应该得到与相同的结果

 q = q.Where(searchTerms.ToLamdaExpression());

在发布此问题之前,我已经花了几天时间进行了研究,希望能在正确的方向上得到帮助。

看看和。

你可能想看看这个:如果你将来想使用“或”而不是“和”但是动态LINQ失去了强类型的所有好处,而且总是看起来像一个逃避的解决方案。像PredicateBuilder这样的东西,如果能让它工作的话,会更好。是的,这就是我正在努力的with@sharmasu:在动态查询情况下,通常用户无论如何都会从字符串构建查询(例如,从下拉列表中选择字段),因此我看不出强键入有多大帮助。