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

EF 开发使用泛型委托 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

在线等~求解药~~
------解决方案--------------------
用Expression<Func<table, bool>> where = s => s.uregdate > dt;