.net 编译实体SQL查询和OrderBy
我试图使用实体SQL生成一个已编译的查询,但在.net 编译实体SQL查询和OrderBy,.net,entity-framework,entity-sql,.net,Entity Framework,Entity Sql,我试图使用实体SQL生成一个已编译的查询,但在ToList()行中出现了以下错误: LINQ to Entities无法识别方法'System.Data.Objects.ObjectQuery'1[BLL.Company]OrderBy(System.String,System.Data.Objects.ObjectParameter[])方法,并且无法将此方法转换为存储表达式 以下是我正在尝试的代码: class param { public string where, orderby
ToList()
行中出现了以下错误:
LINQ to Entities无法识别方法'System.Data.Objects.ObjectQuery'1[BLL.Company]OrderBy(System.String,System.Data.Objects.ObjectParameter[])方法,并且无法将此方法转换为存储表达式
以下是我正在尝试的代码:
class param
{
public string where, orderby;
public int skip, take;
}
..
public class BLL.CompanyManager
{
private static readonly Func<DbContext, param, IQueryable<CompanyInfo>> companyList;
static MyClass()
{
companyList = CompiledQuery.Compile<DbContext, param, IQueryable<CompanyInfo>>(
(DbContext db, param p) =>
db.Companies.Include("Projects")
//.Where(p.where)
.OrderBy(p.orderby)
.Skip(p.skip)
.Take(p.take)
.Select(row => new CompanyInfo()
{
...
})
);
public static List<CompanyInfo> CompanyList(..)
{
...
List<CompanyInfo> list = new List<CompanyInfo>();
using (var db = (DbContext.Instance())
{
list.AddRange(companyList(db, params).ToList<CompanyInfo>()); // <== ERROR
}
return list;
}
}
}
类参数
{
公共字符串,其中,orderby;
公共int跳过,取;
}
..
公共类BLL.CompanyManager
{
私有静态只读Func companyList;
静态MyClass()
{
companyList=CompiledQuery.Compile(
(数据库上下文数据库,参数p)=>
db.公司。包括(“项目”)
//.Where(p.Where)
.OrderBy(p.OrderBy)
.Skip(p.Skip)
.Take(p.Take)
.Select(行=>newcompanyinfo()
{
...
})
);
公共静态列表公司列表(…)
{
...
列表=新列表();
使用(var db=(DbContext.Instance())
{
list.AddRange(companyList(db,params.ToList());//就像上面说的,在L2E查询中不能使用查询生成器方法。区别很微妙,因为它们看起来相同,但查询生成器和L2E不是一回事。这是否意味着我不能编译ObjectQuery查询?或者有办法吗?我想在不使用表达式树和预编译的情况下使用动态排序和分页我不能同时编译它们吗?当然你可以编译ObjectQuery
。你不能使用查询生成器方法编译表达式。你也不能编译“动态”查询。想想看,这在术语上是矛盾的!编译的查询只能根据参数而不是语法变化。