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:在动态查询情况下,通常用户无论如何都会从字符串构建查询(例如,从下拉列表中选择字段),因此我看不出强键入有多大帮助。