一、Linq有兩種語法:
1、 方法語法
2、 查詢語法
下面舉個例子看看這兩種方法的區別
比如現在有一個學生類
public class student
{
public string username { get; set; }
public int age { get; set; }
public string sex { get; set; }
}
我們通過一個方法來添加很多同學
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對這個集合進行操作
首先我們來查詢所有的學生
A、查詢語法:
var list = GetStu(10);
var result = from s in list
select new { stuname=s.username,sex=s.sex,age=s.age};
這是linq常用的語法from 變量 in 集合
Select 變量
B、方法語法
var result1 = list.Select(s1 => new { username = s1.username, age = s1.age, sex = s1.sex });
這就是方法語法,符合一般的C#語法
這兩種方法的執行結果是一樣的,唯一的區別就是語法
二、輸出的方式
輸出的方式也有兩種,我們知道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()
三、下面就來簡單說說linq常用的幾種查詢
1、條件選擇查詢(where)
比如我們要查詢年齡大於26的學生,可以這樣寫
var result = from s in list
where s.age>26 //條件查詢
select s.username;
或者這樣寫
var result2 = list.Where(s => s.age > 25); //條件查詢
2、 查詢排序
比如我們要按照學生年齡倒序排列查詢
var result = from s in list
orderby s.age descending //排序
where s.age>26 //條件查詢
select s.username;
或者這樣寫
var result3 = list.OrderByDescending(s1 =>s1.age);
3、 數據查詢分頁顯示
使用了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()
上面只是簡單的介紹了下linq的用法,具體項目中用到了,在具體對待