国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

剛剛接觸的LINQ

2019-11-17 02:19:19
字體:
來源:轉載
供稿:網友

剛剛接觸的LINQ

科普一下:

語言集成查詢(Language INtegrated Query,LINQ)

是一項微軟技術,新增一種自然查詢的SQL語法到.NET Framework的編程語言中,可支持Visual Basic .NET以及C#語言。

LINQ定義了大約40個查詢操作符,如select、from、in、where以及orderby(C#中)。

使用這些操作符可以編寫查詢語句。不過,這些查詢還可以基于很多類型的數據,每個數據類型都需要一個單獨的LINQ類型。

基礎語法:

  • LINQ的關鍵詞:from, select, in, where,groupby, orderby, …
  • LINQ的注意點:必須以select或者是group by 結束。
  • LINQ的寫法:

1)from 臨時變量 in 實現IEnumerable<T>接口的對象

where條件表達式

[orderby條件]

[group by 條件]

select 臨時變量中被查詢的值

2) 實現IEnumerable接口的對象.LINQ方法名(lambda表達式)。如:

stringinput= "hellow world";

intcount= input.Count(w=>w == 'o'); //查詢字母o出現的次數

能夠使用LINQ的對象需要實現IEnumerable<T>接口。并且LINQ的查詢表達式是在一次創建對象時才被編譯的。

  • LINQ的全稱:Language-Integrated Query
  • 命名空間:System.Linq;

  注意:Linq是在.NET Framework 3.5 中出現的技術,所以在創建新項目的時候必須要選3.5或者更高版本,否則無法使用。

  選擇3.5或更高版本的.NET Framework之后,創建的新項目中會自動包含System.Linq的命名空間。

接著看代碼實現:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace LINQ{    public class Category    {        public int Age { get; set; }        public string PRase { get; set; }    }    public class Program    {        static void Main(string[] args)        {            //對數據集合的操作            List<string> names = new List<string> { "Tom", "Jack", "Jim", "Jackson", "Key", "Kitty" };            var nameJ = from n in names where n.StartsWith("J") orderby n select n;            foreach (var name in nameJ)            {                Console.WriteLine(name);            }            Console.WriteLine("-------------------------");            names.Add("Jack1");            names.Add("Jack2");            names.Add("Jack3");            foreach (string name in nameJ)            {                Console.WriteLine(name);            }            Console.WriteLine("-------------------------");                        List<Category> cs = new List<Category>() {                 new Category{Age=22,Prase="13期"},new Category{Age=22,Prase="12期"},new Category{Age=22,Prase="14期"},            new Category{Age=23,Prase="14期"},new Category{Age=20,Prase="13期"},new Category{Age=24,Prase="14期"},            new Category{Age=25,Prase="14期"},new Category{Age=23,Prase="13期"},new Category{Age=25,Prase="14期"}            };            var s = (from s1 in cs where s1.Age > 21 && s1.Prase == "14期" orderby s1.Age descending select s1).Take(3);            foreach (var c1 in s)            {                Console.WriteLine(c1.Age + " " + c1.Prase);            }            Console.WriteLine("-------------------------");            var ss = from s1 in cs                    group s1 by s1.Prase into c                    orderby c.Count() descending, c.Key                    where c.Count() >= 2                    select c.Key + c.Count();            foreach (var s1 in ss)            {                Console.WriteLine(s1);            }            Console.WriteLine("-------------------------");            object[] data = { "hello",33,"what",36,"fine",39,"thanks"};            var str = data.OfType<string>();            foreach (var a in str)            {                Console.WriteLine(a);            }            Console.ReadKey();        }    }}

  

上述代碼除了LINQ查詢語法外,其他都是我們所熟悉的語法,而LINQ查詢語法跟SQL查詢語法很相似,除了先后順序。

  Q:為何 LINQ 查詢語法是以 from 關鍵字開頭的,而不是以 select 關鍵字開頭的?select 開頭這種寫法跟SQL的寫法更接近,更易懂呀?

  A:簡單來說,為了IDE的智能感知(Intelisence)這個功能,select 關鍵字放在后面了。

  其中的 into 關鍵字表示 將前一個查詢的結果視為后續查詢的生成器,這里是跟 group by 一起使用的。

  LINQ中的Group by不要跟 SQL 中的Group by 混淆,SQL由于是二維結構,Group by 的一些邏輯受二維結構的約束,無法像 LINQ 中的Group by 這么靈活。

  事實上,LINQ的查詢語法存在以下兩種形式:

  查詢方法方式:(Methord Syntax)

  主要利用System.Linq.Enumerable類中定義的擴展方法和Lambda表達式方式進行查詢

參考文檔:Lambda 表達式(C# 編程指南):https://msdn.microsoft.com/zh-cn/library/bb397687.aspx

  查詢語句方式:(Query Syntax)一種更接近SQL語法的查詢方式,可讀性更好。

使用優點:

  1、無需復雜學習過程即可上手

  2、編寫更少代碼即可創建完整應用。

  3、更快開發錯誤更少的應用程序。

  4、無需求助奇怪的編程技巧就可合并數據源。

  5、讓新開發者開發效率更高。

  6、任何對象或數據源都可以定制實現Linq適配器,為數據交互帶來真正方便。

函數支持:

支持以下公共語言運行時(CLR) 方法和屬性,因為它們可以在查詢表達式中進行轉換以包含在OData服務的請求 URI 中:

String成員支持的 OData 函數
  Concat  string,concat(string,p0,string,p1)
  Contains  bool,substringof(string,p0,string,p1)
  EndsWith  bool,endswith(string,p0,string,p1)
  IndexOf  int,indexof(string,p0,string,p1)
  Length  int,length(string,p0)
  Replace  string,replace(string,p0,string,find,string,replace)
  Substring  string,substring(string,p0,int,pos)
  Substring  string,substring(string,p0,int,pos,int,length)
  ToLower  string,tolower(string,p0)
  ToUpper  string,toupper(string,p0)
  Trim  string,trim(string,p0)
DateTime成員1支持的 OData 函數
  Day  int,day(DateTime,p0)
  Hour  int,hour(DateTime,p0)
  Minute  int,minute(DateTime,p0)
  Month  int,month(DateTime,p0)
  Second  int,second(DateTime,p0)
  Year  int,year(DateTime,p0)

  1也支持Visual Basic中等效的Microsoft.VisualBasic.DateAndTime的日期和時間屬性以及DatePart方法。

Math成員支持的 OData 函數
  Ceiling  decimal,ceiling(decimal,p0)
  Ceiling  double,ceiling(double,p0)
  Floor  decimal,floor(decimal,p0)
  Floor  double,floor(double,p0)
  Round  decimal,round(decimal,p0)
  Round  double,round(double,p0)
Expression成員支持的 OData 函數
  TypeIs  bool,isof(type,p0)

  客戶端或許還可以在客戶端上計算其他 CLR 函數。對于無法在客戶端上計算以及無法轉換為有效請求URI以便在服務器上計算的任何表達式,將引發NotSupportedException

參考文檔:在 C# 中編寫查詢 (LINQ):https://msdn.microsoft.com/zh-cn/library/bb397900(v=VS.90).aspx?lc=2052


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吴江市| 天气| 元谋县| 吴堡县| 准格尔旗| 中山市| 潞西市| 凤山县| 通许县| 定日县| 罗甸县| 启东市| 闸北区| 铜陵市| 屏东县| 潼南县| 阆中市| 邵阳县| 安远县| 霸州市| 苗栗市| 亚东县| 凌源市| 平顶山市| 宿州市| 侯马市| 开封市| 泸西县| 长治市| 饶平县| 茌平县| 醴陵市| 密云县| 淮安市| 滁州市| 龙岩市| 东宁县| 象州县| 九寨沟县| 三原县| 连南|