我试图在Linq-to-Entities中创建一个动态查询(我正在使用2012和SQL Server 2005)
以下是详细信息。
create table t1(t1id int, col1 datetime, col2 varchar(500),col3 int)
有下列情况。
select和where子句的列可以更改。
select,where和group by的列可以更改。
示例#1:
Select col1, col2
from t1
where col3 = 1
and co1 between '01 jan 2009' and '31 dec 2013'
示例#2:
Select col1, count(col2)
from t1
where col3 = 1
and co11 between '01 jan 2009' and '31 dec 2013'
group by co11
我想在2012年(linq to entity)
中详细说明如下" select "+ @selectclause + " from t1 where " + whereclause
您诚挚的
答案 0 :(得分:0)
Linq to Entities where和Select子句Take表达式。 Iqueryable其中定义为:
public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate)
Orderby使用类似的表达式。 所以你需要动态构造这些表达式
选项a System.Linq.Dynamic
可能是最容易学习的。具有良好的灵活性
这允许您通过扩展传递字符串。
字符串表达式转换为Expression<Func<>>
Blog on using System.linq.Dynamic
选项B LinqKit 最好的方法。 LinqKit提供了一些巧妙的工具,允许您构建表达式
选项C. Hardcore EXpression树构造。 System.Linq.Expression功能强大而复杂。
组合选项A,B和/或C也是可能的。