网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

linq动态条件查询如何使用

本篇内容主要讲解“linq动态条件查询如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linq动态条件查询如何使用”吧!

创新互联建站专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,成都服务器托管服务有保障!

1,linq动态条件之构造表达式树

  1. private Expression> getCondition()  

  2.     {  

  3.         Expression> expression = blog => true;  

  4.         if (!String.IsNullOrEmpty(Request["BlogClassID"]))  

  5.         {  

  6.             int blogClassID;  

  7.             if (Int32.TryParse(Request["BlogClassID"], out blogClassID))  

  8.             {  

  9.                 Expression> e2 = blog => 

  10. blog.BlogClass == null;  

  11.                 var invokedExpr = Expression.Invoke

  12. (e, expression.Parameters.Cast

    ());  
  13.                 expression = Expression.Lambda>
    (Expression.And(expression.Body, invokedExpr), expression.Parameters);  

  14.             }  

  15.         }  

  16.         return expression;  

  17.     } 

主查询是这个样子:

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> True ()  { return f => true;  }    public static Expression> False () { return f => false; }     public static Expression> Or (this Expression> expr1,                                                Expression> expr2)    {      var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());      return Expression.Lambda>            (Expression.Or (expr1.Body, invokedExpr), expr1.Parameters);    }     public static Expression> And (this Expression> expr1,                                                         Expression> expr2)    {      var invokedExpr = Expression.Invoke (expr2, expr1.Parameters.Cast ());      return Expression.Lambda>            (Expression.And (expr1.Body, invokedExpr), expr1.Parameters);    }  }

这个类可以用于Expression>类型的表达式的合并了。

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动态条件查询如何使用”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


当前名称:linq动态条件查询如何使用
文章转载:http://bjjierui.cn/article/jcijsp.html

其他资讯