亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linq動態條件查詢如何使用

發布時間:2021-12-02 09:30:19 來源:億速云 閱讀:157 作者:iii 欄目:編程語言

本篇內容主要講解“linq動態條件查詢如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“linq動態條件查詢如何使用”吧!

1,linq動態條件之構造表達式樹

  1. private Expression<Func<Blog, bool>> getCondition()  

  2.     {  

  3.         Expression<Func<Blog, bool>> expression = blog => true;  

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

  5.         {  

  6.             int blogClassID;  

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

  8.             {  

  9.                 Expression<Func<Blog, bool>> e2 = blog => 

  10. blog.BlogClass == null;  

  11.                 var invokedExpr = Expression.Invoke

  12. (e, expression.Parameters.Cast

    ());  
  13.                 expression = Expression.Lambda<Func<Blog, bool>>
    (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<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動態條件查詢如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

潜山县| 台湾省| 安乡县| 喀什市| 航空| 呈贡县| 乌兰察布市| 滦南县| 谢通门县| 荣成市| 荆州市| 隆德县| 霞浦县| 吴堡县| 临沂市| 古蔺县| 齐齐哈尔市| 靖远县| 绍兴市| 蒙山县| 博罗县| 贵阳市| 从江县| 佛坪县| 平安县| 黎平县| 金沙县| 大悟县| 乐平市| 长沙市| 淄博市| 四平市| 巢湖市| 阳曲县| 仁布县| 宁远县| 南昌市| 新竹县| 禹城市| 贡山| 金乡县|