动态构建Linq“where”子句

时间:2010-08-18 18:54:49

标签: c# linq linq-to-sql

我正在尝试通过编写额外的代码行来做一些传统上可以做的事情。我在这个网站上看到很少的样本来解决我的问题,但我仍然不能把所有的部分放在一起来解决我想要实现的目标。

这是我想要做的伪代码:

list<t> searchTerms;

class t
{
string columnName;
string columnValue ;
string columnType ;
 string FilterType;
}

我正在使用Linq to SQL来检索数据库中的数据,并希望使用list构建“where”子句:

如下所示:

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;
  }
}

我想做的是使用lambda表达式/反射来实现类似的东西:

q.whereJoinExpression(searchTerms.ToLamdaExpression());

,其中      searchTerms.ToLamdaExpression()

应该返回where子句的输入,即Expression&gt;。  和      whereJoinExpression应该得到与

相同的结果
 q = q.Where(searchTerms.ToLamdaExpression());

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

1 个答案:

答案 0 :(得分:3)