1、Linq有兩種語法:html
一、 方法語法post
二、 查詢語法this
下面舉個例子看看這兩種方法的區別spa
好比如今有一個學生類code
public class student { public string username { get; set; } public int age { get; set; } public string sex { get; set; } }
咱們經過一個方法來添加不少同窗htm
public IList<student> GetStu(int n) { IList<student> stuList = new List<student>(); for (int i = 0; i < n; i++) { student stu = new student(); stu.age = 25 + i; stu.sex = "男" + i; stu.username = "張三" + i; stuList.Add(stu); } return stuList; }
那麼這個方法返回的就是一個list集合,下面咱們就能夠經過linq對這個集合進行操做blog
首先咱們來查詢全部的學生排序
A、查詢語法:ip
var list = GetStu(10); var result = from s in list select new { stuname=s.username,sex=s.sex,age=s.age};
這是linq經常使用的語法from 變量 in 集合get
Select 變量
B、方法語法
var result1 = list.Select(s1 => new { username = s1.username, age = s1.age, sex = s1.sex });
這就是方法語法,符合通常的C#語法
這兩種方法的執行結果是同樣的,惟一的區別就是語法
2、輸出的方式
輸出的方式也有兩種,咱們知道linq主要對集合進行操做的,因此通常都須要循環輸出
第一種輸出方式:
string stt = null; foreach (var sa in result3) { stt += sa.username; } Response.Write(stt);
這是咱們常常用到的foreach循環
第二種輸出方式:
result.ToList().ForEach(s => { Response.Write(s.stuname+s.sex+s.age); });
這種方式很簡介,直接調用ForEach方法,方法體內是一個limba表達式
另外說明下ToList()方法做用,在linq中有種延遲執行,就是當咱們在from…select時候,返回的結果並無執行,當咱們循環調用的時候才執行,這就是延遲執行,有時候爲了當即執行,咱們須要用到ToList()
3、下面就來簡單說說linq經常使用的幾種查詢
一、條件選擇查詢(where)
好比咱們要查詢年齡大於26的學生,能夠這樣寫
var result = from s in list where s.age>26 //條件查詢 select s.username;
或者這樣寫
var result2 = list.Where(s => s.age > 25); //條件查詢
二、 查詢排序
好比咱們要按照學生年齡倒序排列查詢
var result = from s in list orderby s.age descending //排序 where s.age>26 //條件查詢 select s.username;
或者這樣寫
var result3 = list.OrderByDescending(s1 =>s1.age);
三、 數據查詢分頁顯示
使用了Skip和Take方法
Skip做用跳過指定數量的元素
Take的做用是返回指定位置連續數量的元素
var list1 = GetList(50); for (int i = 0; i < 5; i++) { Response.Write("這是第" + (i + 1) + "頁"); var result = from s in list.Skip(i * 10).Take(10) select s; result.ToList().ForEach(s => { Response.Write(s); }); }
這就是分5頁,每頁顯示10個的分頁方式
4|、返回單個元素
用到First(),FirstOrDefault(),single,singleOrDefault()
First():返回第一個元素,若是沒有,則拋出異常
FirstOrDefault():返回第一個元素,若是沒有,則返回空,通常狀況下會返回null
Single:返回的是元素中惟一的元素,若是小於一條,則拋出異常
singleOrDefault:返回的是元素中惟一的元素,若是小於一條,則返回空,一般是null
var result1 = from r in list1 select r; var rt = result1.First(); result1.Single()