也说Linq动态条件查询
2007-07-17 11:24
344 查看
1,构造表达式树
private Expression<Func<Blog, bool>> getCondition()
var result = new DongBlogDataContext().Blogs.Where(getCondition());
因为根据SQL追踪,生成SQL类似:
SELECT [t0].[BlogID], [t0].[ChannelID], [t0].[BlogClassID], [t0].[Title], [t0].[Content], [t0].[Tag], [t0].[CreateDateTime]
FROM [dbo].[Blog] AS [t0]
WHERE [t0].[BlogClassID] IS NULL
这种方法是实质是合并Lamba表达式,也就是这三句:
Expression<Func<Blog, bool>> e = blog => blog.BlogClass == null;
var invokedExpr = Expression.Invoke(e, expression.Parameters.Cast<Expression>());
expression = Expression.Lambda<Func<Blog, bool>>(Expression.And(expression.Body, invokedExpr), expression.Parameters);
如果每个条件合并都这么写会很麻烦,幸好已经有人给写好的辅助类:http://www.albahari.com/expressions/
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
public static class PredicateBuilder
这个类可以用于Expression<Func<T, bool>>类型的表达式的合并了。具体用法参看http://www.albahari.com/expressions/或http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1745163&SiteID=1
2,构造Query
同第一种查询更好的写法:
private IQueryable<Blog> getQuery()
var result = getQuery();
生成的SQL和第一个完全相同。
园子里相关讨论还有
/article/4864897.html
/article/4812839.html
还可参考:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1706161&SiteID=1
private Expression<Func<Blog, bool>> getCondition()
var result = new DongBlogDataContext().Blogs.Where(getCondition());
因为根据SQL追踪,生成SQL类似:
SELECT [t0].[BlogID], [t0].[ChannelID], [t0].[BlogClassID], [t0].[Title], [t0].[Content], [t0].[Tag], [t0].[CreateDateTime]
FROM [dbo].[Blog] AS [t0]
WHERE [t0].[BlogClassID] IS NULL
这种方法是实质是合并Lamba表达式,也就是这三句:
Expression<Func<Blog, bool>> e = blog => blog.BlogClass == null;
var invokedExpr = Expression.Invoke(e, expression.Parameters.Cast<Expression>());
expression = Expression.Lambda<Func<Blog, bool>>(Expression.And(expression.Body, invokedExpr), expression.Parameters);
如果每个条件合并都这么写会很麻烦,幸好已经有人给写好的辅助类:http://www.albahari.com/expressions/
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;
public static class PredicateBuilder
这个类可以用于Expression<Func<T, bool>>类型的表达式的合并了。具体用法参看http://www.albahari.com/expressions/或http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1745163&SiteID=1
2,构造Query
同第一种查询更好的写法:
private IQueryable<Blog> getQuery()
var result = getQuery();
生成的SQL和第一个完全相同。
园子里相关讨论还有
/article/4864897.html
/article/4812839.html
还可参考:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1706161&SiteID=1
相关文章推荐
- 用Linq 实现动态多条件查询
- Linq to sql 实现多条件的动态查询(方法一)
- EF-Linq 将实体对象转换为搜索条件以进行通用动态查询
- LINQ to SQL 运行时动态构建查询条件
- LINQ动态条件查询(一)
- [转]LinqToSql的问题 多条件 动态变化查询条件怎样查询
- linq 优缺点、多重条件动态查询
- 用Linq 实现动态多条件查询(转载)
- linq to sql的多条件动态查询(下)
- Linq to Entity 动态拼接查询条件(重点是OR)
- Linq动态条件查询
- LINQ to Entities 多条件动态查询
- linq to sql的多条件动态查询(下)
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- linq to sql的多条件动态查询
- Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询
- linq 动态拼接查询条件 扩展方法
- Linq 动态表达式 多条件查询
- (转)LINQ to Entities 多条件动态查询
- 动态拼接LINQ查询条件的解决方案