C 基礎 Linq學習理解

2022-02-06 06:58:08 字數 3853 閱讀 3487

一遍學習基礎,一遍練習打字,很多樂趣。 

**

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

using

system.reflection;

namespace

dazilianxi

public

string name

}public

class

product

public

string name

public category category

public datetime buydate

public

decimal price

public

override

string

tostring()

}public

static

class

producthelper

,new product(),

new product(),

new product()

};return

list;}}

public

class productcomparer : icomparer, iequalitycomparer//

居然要具體的類

else

//如果類別名稱不同,比較類別的編號

}public

bool

equals(product x, product y)

else

}//這個是介面裡的,一定要實現

public

intgethashcode(product obj)

}public

class propertycomparer: iequalitycomparer 不是的屬性

", propertyname, typeof

(t)));}}

public

bool

equals(t x, t y)

public

intgethashcode(t obj)}}

}

var query = producthelper.getproducts().orderby(x=>x.id).orderby(b=>b.buydate).orderbydescending(c=>c.category.id).thenby(p=>p.price);

showconsole(query);

var query2 = producthelper.getproducts().select((x, index) => new );//

這裡用到了乙個匿名物件

foreach(var item in

query2),索引

",item.name,item.index);

}var query3 = producthelper.getproducts().orderby(x => x, new

productcomparer());

showconsole(query3);

list

list = new list()

;var query4 = list.skip(7).take(5

); showconsole

(query4);

console.writeline(

"-------");

var query5 = list.takewhile(x => x <= 5).takewhile(x => x > 1);//

3showconsole(query5);

console.writeline(

"-------");

var query6 = list.takewhile(x => x <= 5).where(x => x > 1);//

3,2,3,4,5

showconsole(query6);

console.writeline(

"-------");

var query7 = list.takewhile(x => x <= 5).where(x => x > 1).distinct();//

3,2,4,5 去重

showconsole(query7);

console.writeline(

"-------");

int arr1 = ;

int arr2 = ;

var query8 = arr1.intersect(arr2);//

取交集2,3

showconsole(query8);

console.writeline(

"-------");

var query9 = arr1.except(arr2);//

except()獲取第乙個集合中有,而第二個集合中沒有的元素 0,1

showconsole(query9);

console.writeline(

"-------");

var query10 = arr1.concat(arr2); //

concat()將2個集合串聯起來,不剔除重複元素

showconsole(query10);

console.writeline(

"-------");

var query11 = arr1.union(arr2); //

union()將2個集合串聯起來,剔除重複元素

showconsole(query11);

console.writeline(

"-------");

//zip()合併2個集合中位置相同的元素,將2個元素的操作結果返回乙個新的元素。如果兩個集合的長度不相等,以長度短的為準。

int arr11 = ;

string arr22 = ;

var query12 = arr11.zip(arr22, (x, y) => string.format(","

, x, y));

showconsole

(query12);

private

static

void showconsole(ienumerablelist)

}

總結:● 一般性的條件篩選:where() 

● 返回具體的集合型別再進行鏈式操作:oftype() 

● 非泛型集合轉換成泛型集合後再使用linq操作符:cast() 

● 排序、鏈式排序:orderby(), thenby(),實現icomparer介面可以自定義排序規則 

● 投影:select() 

● 返回前n個,跳過n個,分頁:take()和skip()   

● 返回符合/不符合條件,但不執行完遍歷:takewhile()和skipwhile() 

● 反轉集合元素:reverse() 

● 空集合處理:defaultifempty() 

● 剔除集合中的重複元素:distinct(),實現iequalitycomparer可自定義相等規則,針對某具體類或寫乙個泛型方法 

● 分組以及分組後投影:groupby() 

● 2個集合的交集:intersect() 

● 2個集合的查集:except() 

● 2個集合的串聯:concat()和union() 

● 2個集合的合併:zip()

非常基礎的知識點,只有實踐一次,才真的明白。

C 學習 LINQ 查詢

在c 中使用linq查詢需要引入命名空間using system.linq 案例實操 資料準備 var roles newlist gamerole newgamerole newgamerole newgamerole newgamerole newgamerole newgamerole var...

C 基礎 Linq提供程式

1 linq to xml 命名空間system.xml.linq 2 linq to objects 3 linq to entities linq to objects的where和linq to entities的where這個兩個類都在system.linq命名空間的system.core程...

理解Linq查詢

using system using system.linq static class program public static void main var query from n in numbers select square n query只是乙個語句,下面的foreach才執行內容 fo...