LINQ是.NET3.5以後才有的功能
作用是提供選擇資料、排列資料...等處理資料的功能
假如,資料的結構長這樣
- public class box
- {
- private string _item1;
- private string _item2;
- public string Item1
- {
- get
- {
- return _item1;
- }
- set
- {
- _item1 = value;
- }
- }
- public string Item2
- {
- get
- {
- return _item2;
- }
- set
- {
- _item2 = value;
- }
- }
- }
現在定義一個用box格式的List叫做b
- List<box> b = new List<box>();
如果只是要把Item1進行排序
使用:
- b=b.OrderBy(x => x.Item1).ToList();
如果是要把Item1進行排序,並且讓b只留下帶有"apple"字串Item1
使用:
- b=b.Where(y => y.Item.IndexOf("apple")>=0).OrderBy(x => x.Item1).ToList();
如果是要把Item1進行排序,Item1 & Item2視為一整體(Item1移動時Item2跟著一起移動),並且讓b只留下帶有"apple"字串Item1
使用:
- b = b.GroupBy(z => z.Item1).Where(y => y.Item.IndexOf("apple") >= 0).OrderBy(x => x.Key).ToList();
如果是要把Item1、Item2進行排序(Item1排完,再排Item2),Item1 & Item2視為一整體(Item1移動時Item2跟著一起移動),並且讓b只留下帶有"apple"字串Item1
使用:
- b = b.GroupBy(z => new {z.Item1 , z.Item2}).Where(y => y.Item.IndexOf("apple") >= 0).OrderBy(x => x.Key.Item1).ThenBy(r => r.Key.Item2).ToList();
說真的,蠻麻煩的
順便提一下,List有個奇怪的特性,害我搞超久
做個紀錄一下
- List<box> b = new List<box>();
- List<box> b2 = new List<box>();
如果,如果b裡面已經有資料,現在我們要讓b2跟b的資料一樣
如果使用
- b2=b;
當b2被LINQ排序的時候,b似乎也會跟著改變
b並沒有被複製給b2
必須使用
- b.CopyTo(b2,0);