• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
一个具有上进心的码农
因为一篇文章中有很多是从很多篇文章中摘取的,请恕我没有一一说明摘取出处,如果没有说明,则该文章默认是摘取,如有侵犯您的权益,请与我联系,将会马上删除。
博客园    首页    新随笔    联系   管理    订阅  订阅

DataTable根据类型求和.DataTable Linq

 

最近在做一个项目时,要写到一个这样的方法。根据一个DataTable。 如果它的其中一列是INT或FLOAT之类的话。则要求合。

 

下面写一下, 

Code
DataTable table = new DataTable();
         table.Columns.Add(
"IntColumn", typeof(int));
         table.Columns.Add(
"StringColumn", typeof(string));
         table.Columns.Add(
"DateTimeColumn", typeof(DateTime));

         table.Rows.Add(
1, "第1行", DateTime.Now);
         table.Rows.Add(
2, "第2行", DateTime.Now);
         table.Rows.Add(
3, "第3行", DateTime.Now);
         table.Rows.Add(
4, "第4行", DateTime.Now);
         table.Rows.Add(
5, "第5行", DateTime.Now);
         table.Rows.Add(
6, "第6行", DateTime.Now);

         Dictionary
<string, string> numericColumns = new Dictionary<string, string>();
         
foreach (DataColumn column in table.Columns)
         {
            
if (column.DataType == typeof(int))
            {
               
string sumName = string.Format("Sum({0})", column.ColumnName);

               numericColumns.Add(sumName, 
string.Format("Sum({0})", column.ColumnName));

            }
         }

         
foreach (string key in numericColumns.Keys)
         {
            table.Columns.Add(key, 
typeof(int), numericColumns[key]);
         }
         table.AcceptChanges();
         
//Print Table
         foreach (DataRow row in table.Rows)
         {
            
foreach (DataColumn column in table.Columns)
            {
               Console.Write(
"{0}    ", row[column]);

            }
            Console.Write(
"\r\n");
         }


结果
1    第1行    2009/11/23 10:49:27    21
2    第2行    2009/11/23 10:49:27    21
3    第3行    2009/11/23 10:49:27    21
4    第4行    2009/11/23 10:49:27    21
5    第5行    2009/11/23 10:49:27    21
6    第6行    2009/11/23 10:49:27    21

 

今天在写一个DATATABLE时。居然没想到用LINQ。

下面是DataTable的Linq化

 

 

Code
IEnumerable <DataRow> rows = dt.Rows.OfType <DataRow>(); 
rows.GroupBy(a 
=> a["A"].ToString()).Select(a => new 
{ 
    A 
= a.First()["A"].ToString(), 
percent 
= a.Count() / dt.Rows.Count 
}); 


var query 
= from dt in dv1.Table.AsEnumerable() 
                            group dt by dt.Field 
<string>("类别"); 
                
foreach (var dd in query) 
                { 
                    combox1.Items.Add(dd.Key); 
                } 

 

 

 

 

posted @ 2009-11-23 22:32  不若相忘于江湖  阅读(1453)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3