Fork me on gitee

Linq的一些操作

 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 }
View Code

 

posted @ 2021-04-28 18:46  寒夜听风  阅读(40)  评论(0)    收藏  举报