本篇内容主要讲解“linq动态条件查询如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linq动态条件查询如何使用”吧!1,linq动态条件之构造表达式树private Expr
本篇内容主要讲解“linq动态条件查询如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linq动态条件查询如何使用”吧!
1,linq动态条件之构造表达式树
private Expression<Func<Blog, bool>> getCondition()
{
Expression<Func<Blog, bool>> expression = blog => true;
if (!String.IsNullOrEmpty(Request["BloGClassID"]))
{
int blogClassID;
if (Int32.TryParse(Request["BlogClassID"], out blogClassID))
{
Expression<Func<Blog, bool>> e2 = blog =>
blog.BlogClass == null;
var invokedExpr = Expression.Invoke
(e, expression.Parameters.Cast
()); expression = Expression.Lambda<Func<Blog, bool>>
(Expression.And(expression.Body, invokedExpr), expression.Parameters);
}
}
return expression;
}
主查询是这个样子:
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表达式,也就是这三句。
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
如果每个条件合并都这么写会很麻烦,幸好已经有人给写好的辅助类:
using System; using System.Linq; using System.Linq.Expressions; using System.Collections.Generic; public static class PredicateBuilder { public static Expression<Func<T, bool>> True () { return f => true; } public static Expression<Func<T, bool>> False () { return f => false; } public static Expression<Func<T, bool>> Or (this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2) { var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ()); return Expression.Lambda<Func<T, bool>> (Expression.Or (expr1.Body, invokedExpr), expr1.Parameters); } public static Expression<Func<T, bool>> And (this Expression<Func<T, bool>> expr1, Expression<Func<T, bool>> expr2) { var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ()); return Expression.Lambda<Func<T, bool>> (Expression.And (expr1.Body, invokedExpr), expr1.Parameters); } }
这个类可以用于Expression<Func
2,linq动态条件之构造Query
同***种查询更好的写法:
private IQueryable getQuery() { IQueryable query = new DongBlogDataContext().Blogs; if (!String.IsNullOrEmpty(Request["BlogClassID"])) { int blogClassID; if (Int32.TryParse(Request["BlogClassID"], out blogClassID)) query = query.Where(blog => blog.BlogClass == null); } return query.OrderByDescending(blog => blog.CreateDateTime); }
主查询
var result = getQuery();
生成的sql和***个完全相同。
到此,相信大家对“linq动态条件查询如何使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
--结束END--
本文标题: linq动态条件查询如何使用
本文链接: https://lsjlt.com/news/293561.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0