精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

LINQ動態查詢的方法有哪些

本篇內容介紹了“LINQ動態查詢的方法有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

創新互聯是一家專業提供霍山企業網站建設,專注與成都網站設計、成都網站制作、H5高端網站建設、小程序制作等業務。10年已為霍山眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。

在LINQ動態查詢中,Lambda表達式是許多標準查詢運算符的基礎,編譯器創建lambda表達式以捕獲基礎查詢方法(例如 Where、Select、Order By、Take While 以及其他方法)中定義的計算。表達式目錄樹用于針對數據源的結構化查詢,這些數據源實現IQueryable

例如,LINQ to SQL 提供程序實現 IQueryable接口,用于查詢關系數據存儲。C#和Visual Basic編譯器會針對此類數據源的查詢編譯為代碼,該代碼在運行時將生成一個表達式目錄樹。然后,查詢提供程序可以遍歷表達式目錄樹數據結構,并將其轉換為適合于數據源的查詢語言。

表達式目錄樹在LINQ中用于表示分配給類型為Expression的變量的Lambda表達式。還可用于創建LINQ動態查詢。

System.Linq.Expressions命名空間提供用于手動生成表達式目錄樹的API。Expression類包含創建特定類型的表達式目錄樹節點的靜態工廠方法,例如,ParameterExpression(表示一個已命名的參數表達式)或 MethodCallExpression(表示一個方法調用)。編譯器生成的表達式目錄樹的根始終在類型Expression的節點中,其中TDelegate是包含至多五個輸入參數的任何TDelegate委托;也就是說,其根節點是表示一個lambda表達式。

下面幾個例子描述如何使用表達式目錄樹來創建LINQ動態查詢。

1.LINQ動態查詢之Select下面例子說明如何使用表達式樹依據 IQueryable 數據源構造一個動態查詢,查詢出每個顧客的ContactName,并用GetCommand方法獲取其生成SQL語句。

//依據IQueryable數據源構造一個查詢  IQueryable custs = db.Customers;  //組建一個表達式樹來創建一個參數  ParameterExpression param =     Expression.Parameter(typeof(Customer), "c");  //組建表達式樹:  c.ContactNameExpression selector = Expression.Property(param,    typeof(Customer).GetProperty("ContactName"));Expression pred = Expression.Lambda(selector, param);  //組建表達式樹:  Select(c=>c.ContactName)Expression expr = Expression.Call(typeof(Queryable), "Select",    new Type[] { typeof(Customer), typeof(string) },    Expression.Constant(custs), pred);  //使用表達式樹來生成動態查詢  IQueryable query = db.Customers.AsQueryable()    .Provider.CreateQuery(expr);  //使用GetCommand方法獲取SQL語句  System.Data.Common.DbCommand cmd = db.GetCommand(query);Console.WriteLine(cmd.CommandText);

生成的SQL語句為:

SELECT [t0].[ContactName] FROM [dbo].[Customers] AS [t0]

2.LINQ動態查詢之Where下面一個例子是“搭建”Where用法來動態查詢城市在倫敦的顧客。

IQueryable custs = db.Customers;  //創建一個參數  cParameterExpression param =     Expression.Parameter(typeof(Customer), "c");  c.City=="London"Expression left = Expression.Property(param,    typeof(Customer).GetProperty("City"));Expression right = Expression.Constant("London");Expression filter = Expression.Equal(left, right);Expression pred = Expression.Lambda(filter, param);  Where(c=>c.City=="London")Expression expr = Expression.Call(typeof(Queryable), "Where",    new Type[] { typeof(Customer) },     Expression.Constant(custs), pred);  //生成動態查詢IQueryable query = db.Customers.AsQueryable()    .Provider.CreateQuery(expr);

生成的SQL語句為:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],   [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],   [t0].[PostalCode], [t0].[Country], [t0].[Phone],   [t0].[Fax]FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

3.LINQ動態查詢之OrderBy本例既實現排序功能又實現了過濾功能。

IQueryable custs = db.Customers;    //創建一個參數cParameterExpression param =     Expression.Parameter(typeof(Customer), "c");    c.City=="London"Expression left = Expression.Property(param,      typeof(Customer).GetProperty("City"));Expression right =   Expression.Constant("London");    Expression filter = Expression.Equal(left, right);Expression pred =   Expression.Lambda(filter, param);    Where(c=>c.City=="London")MethodCallExpression whereCallExpression =   Expression.Call(    typeof(Queryable), "Where",      new Type[] { typeof(Customer) },    Expression.Constant(custs), pred);    OrderBy(ContactName =>   ContactName)MethodCallExpression orderByCallExpression =   Expression.Call(    typeof(Queryable), "OrderBy",      new Type[] { typeof(Customer), typeof(string) },       whereCallExpression,      Expression.Lambda(Expression.Property    (param, "ContactName"), param));    //生成動態查詢    IQueryable query =  db.Customers.AsQueryable().Provider.CreateQuery(orderByCallExpression);

生成的SQL語句為:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName],   [t0].[ContactTitle], [t0].[Address], [t0].[City], [t0].[Region],[t0].[PostalCode],   [t0].[Country], [t0].[Phone],   [t0].[Fax]FROM [dbo].[Customers] AS [t0] WHERE [t0].[City] = @p0ORDER BY [t0].[ContactName]-- @p0: Input NVarChar (Size = 6; Prec = 0; Scale = 0) [London]

4.LINQ動態查詢之Union下面的例子使用表達式樹動態查詢顧客和雇員同在的城市。

//e.CityIQueryable custs = db.Customers;          ParameterExpression param1 = Expression.Parameter(typeof(Customer), "e");  Expression left1 = Expression.Property(param1,typeof(Customer).GetProperty("City"));Expression pred1 = Expression.Lambda(left1, param1);  c.CityIQueryable employees = db.Employees;ParameterExpression param2 = Expression.Parameter(typeof(Employee), "c");Expression left2 = Expression.Property(param2,     typeof(Employee).GetProperty("City"));Expression pred2 = Expression.Lambda(left2, param2);  Select(e=>e.City)Expression expr1 = Expression.Call(typeof(Queryable), "Select",     new Type[] { typeof(Customer), typeof(string) },Expression.Constant(custs), pred1);  Select(c=>c.City)Expression expr2 = Expression.Call(typeof(Queryable), "Select",     new Type[] { typeof(Employee), typeof(string) }, Expression.Constant(employees), pred2);  //生成動態查詢  IQueryable q1 = db.Customers.AsQueryable().Provider.CreateQuery(expr1);IQueryable q2 = db.Employees.AsQueryable().Provider.CreateQuery(expr2);  //并集  var q3 = q1.Union(q2);

生成的SQL語句為:

SELECT [t2].[City]  FROM   (    SELECT [t0].[City] FROM [dbo].[Customers] AS [t0]    UNION    SELECT [t1].[City] FROM [dbo].[Employees] AS [t1]    )   AS [t2]

“LINQ動態查詢的方法有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!


網站欄目:LINQ動態查詢的方法有哪些
轉載源于:http://m.jcarcd.cn/article/pdcddj.html
主站蜘蛛池模板: 91精品一区| 果冻传媒网站入口 | 国产极品美 | 欧美日皮片 | 国产在线一 | 最新国产成人拍偷乱偷精品 | 区二区三区新线路 | 国产在线综合网站 | 3d成人动漫资源 | 成人导航秘网站 | 国产玉足| 国产精品自产拍高 | 日韩免费在线视频 | 91高清在线| 精品免费中文字幕 | 日韩四级片在线看 | 成人碰碰视频 | 中文字幕va一区二 | 99热r| 欧美午夜在线看片网 | 91精品| 强开女学生的小嫩苞 | 中文字幕日韩wm | 午夜一日本级频 | 乱淫视频 | 精品动漫一区二区 | 国产在线日韩欧美 | 伦理片国产精品 | 国产永久免 | 日韩性爱视频网站 | 欧美日韩不卡高 | 97在线观看 | 国产va免费精 | 日本失禁成 | 国产乱人视频在线看 | 国内在线视频精品 | 国产在线精品12页 | 国产自产第5区 | 欧美三级韩国三 | 国产呦啪精品 | 区免费97|