linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
2010-08-25 16:27
771 查看
在上一篇中,我们做了基于linq to sql 的多条件组合查询,但通过监视数据库发现,这样做的成本比较高,每次都要取出全部的数据到内存进行筛选.如何从真正意义上做到延迟加载,即一次只从数据库中取我们需要的用到的那部分数据呢.通过研究,有了下面的方法:
首先,我们要新建一个静态类,用于存放多条件组合查询的各种组合,比如or,And这些等等.代码如下:
代码
private void GetCondition(ref Expression<Func<FeedBack, bool>> expr) {
int isLock = Int32.Parse(ddlIsLock.SelectedValue);
if (isLock > -1)
{
expr = expr.And(c => (c.IsLock == isLock));//一次组合
}
string keyword = tbxKeyword.Text.FilterInjectStr();
if (!keyword.IsNullOrEmpty())
{
expr = expr.And(c => (c.HotelName.IndexOf(keyword) > -1)); //二次组合
}
}
到此,我们已经完成了linq to Sql多条件组合查询,并且对数据库的请求做到最小化.
另外,要特别说明的是:对数据源的任何操作,最好用延迟加载,否则,将有可能加载全部数据,
例如,我们写这样的代码:List<FeedBack> fbs = hm.AllFeedBacks.Where(c=>c.Id > 1000).ToList();这样消耗将会非常严重!因为这里会将FeedBack表所有数据全部加载进来!所以,千万要慎用这种写法.
总结:微软的linq to sql给我们带来便利的同时,也埋下许多的隐患,比如给像我这样的偷懒者更多便利,但却不去思考,往往一不小心就加载了数据,造成了资源的浪费.在享受这些便利的同时,应注意适时地进行研究,以让它们更好地为我们服务.
首先,我们要新建一个静态类,用于存放多条件组合查询的各种组合,比如or,And这些等等.代码如下:
代码
private void GetCondition(ref Expression<Func<FeedBack, bool>> expr) {
int isLock = Int32.Parse(ddlIsLock.SelectedValue);
if (isLock > -1)
{
expr = expr.And(c => (c.IsLock == isLock));//一次组合
}
string keyword = tbxKeyword.Text.FilterInjectStr();
if (!keyword.IsNullOrEmpty())
{
expr = expr.And(c => (c.HotelName.IndexOf(keyword) > -1)); //二次组合
}
}
到此,我们已经完成了linq to Sql多条件组合查询,并且对数据库的请求做到最小化.
另外,要特别说明的是:对数据源的任何操作,最好用延迟加载,否则,将有可能加载全部数据,
例如,我们写这样的代码:List<FeedBack> fbs = hm.AllFeedBacks.Where(c=>c.Id > 1000).ToList();这样消耗将会非常严重!因为这里会将FeedBack表所有数据全部加载进来!所以,千万要慎用这种写法.
总结:微软的linq to sql给我们带来便利的同时,也埋下许多的隐患,比如给像我这样的偷懒者更多便利,但却不去思考,往往一不小心就加载了数据,造成了资源的浪费.在享受这些便利的同时,应注意适时地进行研究,以让它们更好地为我们服务.
相关文章推荐
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树!
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- linq to sql中,如何解决多条件查询问题,答案,用表达式树!
- linq to sql 中,如何解决多条件查询问题,答案,用表达式树! (下)
- Linq to Sql 或linq to entities 与SQL 查询结果不一致,返回重复结果问题解决方法
- [转]LinqToSql的问题 多条件 动态变化查询条件怎样查询
- linq to sql统一更新方法,直接返回更新的对象(解决更新后再刷新数据错误显示问题)
- linq to sql的多条件动态查询(下)
- 解决pl/sql developer 中文字段显示乱码或无法用中文作查询条件的问题
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
- LINQ to SQL 运行时动态构建查询条件
- linq to sql 动态构建查询表达式树
- LINQ To SQL 拼接查询条件
- LINQ to SQL 运行时动态构建查询条件
- LINQ to SQL 运行时动态构建查询条件
- linq to sql的多条件动态查询(上)
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询