我正在尝试通过编写额外的代码行来做一些传统上可以做的事情。我在这个网站上看到很少的样本来解决我的问题,但我仍然不能把所有的部分放在一起来解决我想要实现的目标。
这是我想要做的伪代码:
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());
在发布此问题之前,我已投入了几天的时间进行研究,并希望在正确的方向上获得帮助。