1 using System;
2 using System.Collections.Generic;
3 using System.Data;
4 using System.Linq;
5 using System.Text;
6
7 namespace LinqToObject
8 {
9 public class LinqToDataTable
10 {
11 public static void LinqToDt()
12 {
13 DataTable dt = new DataTable();
14
15 dt.Columns.Add("Name", typeof(string));
16 dt.Columns.Add("Sex", typeof(string));
17 dt.Columns.Add("Age", typeof(int));
18
19 for (int i = 0; i < 100; i++)
20 {
21 DataRow dr = dt.NewRow();
22 if (i > 50)
23 {
24 dr["Name"] = "cbs";
25 dr["Sex"] = "male";
26 }
27 else
28 {
29 dr["Name"] = "cbs2";
30 dr["Sex"] = "female";
31 }
32 dr["Age"] = i;
33 dt.Rows.Add(dr);
34 }
35 DataTable dtResult = dt.Clone();
36 //使用where
37 var var_dt = dt.AsEnumerable().Where<DataRow>(ss=>ss["Name"].ToString()=="cbs");
38 int count = var_dt.Count<DataRow>(); //获取dt中Name 名为cbs的数量
39
40 //使用Average
41 var avg_dt = dt.AsEnumerable().Average<DataRow>(pp => float.Parse(pp["Age"].ToString()));
42
43 //使用GroupBy
44 var groupby_dt = dt.AsEnumerable().GroupBy(G => G["Name"].ToString()) //根据Name分组
45 .Select(S => new { //分组统计
46 Name = S.Key, //分组的值
47 SumName=S.Sum(sm=>sm.Field<int>("Age")),
48 CountName = S.Count(sc=>sc.Field<int>("Age")==2)
49 });
50 groupby_dt.ToList().ForEach(f=>dtResult.Rows.Add(f.Name,f.SumName,f.CountName));
51
52 //使用Orderby
53 var orderby_dt = dt.AsEnumerable().OrderBy(o=>o["Age"]).CopyToDataTable();
54 dt = dt.AsEnumerable().OrderByDescending(o => o["Age"]).CopyToDataTable();
55
56 //使用Distinct
57 dt = dt.AsEnumerable().Distinct().CopyToDataTable();
58
59 //查询
60 var rows = dt.Select("Name='cbs'");
61
62 var q1 = from d in dt.AsEnumerable()
63 where d.Field<string>("Name") == "cbs"
64 group d by d.Field<string>("Sex")
65 into m
66 select new
67 {
68 Name = m.Key,
69 // CountName=m.Count(n=>n.Field<DateTime?>("Name").HasValue) 可为空的有HasValue属性判断是否有值
70 };
71
72 var mm = from d in dt.AsEnumerable()
73 where d.Field<string>("Name") == "cbs"
74 select new Item
75 {
76 Name=d.Field<string>("Name"),
77 Sex=d.Field<string>("Sex")
78 };
79
80 }
81
82 public class Item
83 {
84 public string Name { get; set; }
85 public string Sex { get; set; }
86 }
87 }
88 }