C# LINQ
标准的查询操作符
1、筛选
List<string> list = new List<string>() {"A1", "A2", "B1", "B2", "C1", "C2" }; var t = from v in list where v.StartsWith("A") orderby v descending select v;
2、带索引筛选
List<string> list = new List<string>() {"A1", "A2", "B1", "B2", "C1", "C2" }; var va = list.Where((r, index) => { return r.StartsWith("B") && index % 2 == 0; }).ToList<string>();
3、类型筛选
List<object> objList = new List<object>() { 1, 2, "33", "44", 5, "66" }; var obj_int = objList.OfType<int>(); FunLib.printList<int>(obj_int);
4、复合的from语句
struct data { public int[] arrInt; public string name; } List<data> dataList = new List<data>() { new data(){arrInt = new int[]{1,2,3}, name = "123"}, new data(){arrInt = new int[]{4,5,6}, name = "456"}, new data(){arrInt = new int[]{7,8,9}, name = "789"}}; var tData = from v in dataList from c in v.arrInt where v.name == "123" select c + 1;
5、排序
struct data { public int[] arrInt; public string name; public int age; public override string ToString() { return string.Format("data[{0},{1}]", name, age); } } List<data> dataList = new List<data>() { new data(){arrInt = new int[]{1,2,3}, name = "a123", age = 1}, new data(){arrInt = new int[]{4,5,6}, name = "a123", age = 2}, new data(){arrInt = new int[]{7,8,9}, name = "a123", age = 3}, new data(){arrInt = new int[]{7,8,9}, name = "a256", age = 4}, new data(){arrInt = new int[]{7,8,9}, name = "a356", age = 6}, new data(){arrInt = new int[]{7,8,9}, name = "a456", age = 5}, new data(){arrInt = new int[]{7,8,9}, name = "789", age = 3}}; var tData = from v in dataList where v.name.StartsWith("a") orderby v.name descending, v.age//多个关键字排序,用逗号隔开 select v.ToString();
6、分组
List<data> dataList = new List<data>() { new data(){arrInt = new int[]{1,2,3}, name = "a123", age = 1}, new data(){arrInt = new int[]{4,5,6}, name = "a123", age = 2}, new data(){arrInt = new int[]{7,8,9}, name = "a123", age = 3}, new data(){arrInt = new int[]{7,8,9}, name = "a456", age = 4}, new data(){arrInt = new int[]{7,8,9}, name = "a456", age = 6}, new data(){arrInt = new int[]{7,8,9}, name = "a456", age = 5}, new data(){arrInt = new int[]{7,8,9}, name = "789", age = 3}, }; var tData = from v in dataList group v by v.name;
//data[a123,1], data[a123,2], data[a123,3]
//data[a456,4], data[a456,6], data[a456,5]
//data[789,3]
var tData = from v in dataList group v by v.name into g where g.Key == "a123" select g;
//data[a123,1], data[a123,2], data[a123,3]
枚举查询分组的结果
foreach (IGrouping<string, data> v in tData) { foreach(data d in v) { } }
7、连接
var tData1 = from v in dataList join d in dataList on v.age equals d.age into g select g; var tData2 = from v in dataList join d in dataList on v.age equals d.age select new { n1 = v.name, n2 = d.name, age = v.age };

浙公网安备 33010602011771号