日期:2014-05-20  浏览次数:20779 次

EF中使用Func<T>做为where条件时,查询执行的SQL不同的问题 求解!
做了一个基类,有一GETLIST的方法 适用于所有EF中的表的查询,这里使用了Func<T>做为条件

在查询表结果是查询条件为 uregdate>datetime.now(-20);


System.Data.Objects.ObjectSet<table> os = hyet.CreateObjectSet<table>("tables");
DateTime dt = DateTime.Now.AddDays(-20);
SkipCount=0;
PageSize=5;

执行 第一种查询方式 

os.Where(s => s.uregdate > dt).OrderBy(s => s.id).Skip(SkipCount).Take(PageSize).ToList();

使用MSSQL性能监测工具得到的sql是带where的,即:

select * from table where .....(分页语句也包括在内);<-----期望的结果


执行 第二种查询方式

Func<table, bool> where1 = s => s.uregdate > dt;
Func<table, int> order1 = s => s.id;
os.Where(where1).OrderBy(order1).Skip(SkipCount).Take(PageSize).ToList();

使用MSSQL性能监测工具得到的sql是全表查询,即:

select * from table;<-----他的分页和where操作 应该是在内存的


求解:目前为了重使我封装的是第2种方式  使用泛型委托做为参数  传查询条件进来,可是数据库的执行会影响性能,所以想让数据库的执行sql为第一种方式执行的sql

在线等~求解药~~



------解决方案--------------------
木有人知道么?求解药啊。~~~