class ClientStruct
{
public string ID = "ID";
public string Name = "Name";
public string Company = "Company";
public string CreatedDate = "CreatedDate";
}
public string[,] infoArr = new string[,] { { "", "百度", "baidu", "" }, { "", "迅雷", "xunlei", "" }, { "", "谷歌", "guge", "" } }; 
protected void LinqDataTable()
{
DataRow row;
ClientStruct cs = new ClientStruct();
DataTable dtTable = new DataTable();
dtTable.Columns.Add(cs.ID);
dtTable.Columns.Add(cs.Name);
dtTable.Columns.Add(cs.Company);
dtTable.Columns.Add(cs.CreatedDate);
for (int i = ; i < ; i++)
{
row = dtTable.NewRow();
row[cs.ID] = infoArr[i, ];
row[cs.Name] = infoArr[i, ];
row[cs.Company] = infoArr[i, ];
row[cs.CreatedDate] = infoArr[i, ];
dtTable.Rows.Add(row);
} //遍历DataTable,取出所有的ID
List<string> lstID = (from d in dtTable.AsEnumerable()
select d.Field<string>(cs.ID)).ToList<string>(); //遍历DataTable,将其中的数据对应到ClientStruct中:
List<ClientStruct> list = (from x in dtTable.AsEnumerable()
orderby x.Field<string>(cs.Company)
select new ClientStruct
{
ID = x.Field<string>(cs.ID),
Name = x.Field<string>(cs.Name),
Company = x.Field<string>(cs.Company),
CreatedDate = x.Field<string>(cs.CreatedDate)
}).ToList<ClientStruct>(); //遍历DataTable,并将上面的List结果存储到Dictionary中:
Dictionary<string, ClientStruct> dic = list.ToDictionary(p => p.Company);
//p作为string键值来存储
}

其实关键是AsEnumerable()方法,返回一个 System.Collections.Generic.IEnumerable<T> 对象

误区:

一:

 var dd=from DataRow r in dt.Rows select r ;
foreach (var item in dd)
{
var hh = item;
}

二:

  var dtrows = dt.Rows.Cast<DataRow>();
var aaaaaa = dtrows.ToList();

本来认为通过以上两种方式可以方便的得到 列以及对应的值  方便序列化成json

调试:

结果并非想象的   列名 对应相应的值  其中ItemArray中只是对应的值  没中对应的列名

Table是原始的得到的DataTable数据   即使通过linq进行过滤  也没用  里面仍然是原始数据

dd.Skip(pagination.rows * (pagination.page - )).Take(pagination.rows);

所以不要想着通过这种方式来 对DataTable进行分页  然后序列换json 在前台通过Grid进行显示,因为序列化的结果并不是   列名:值 的json数据。

实战:

  public string GetListJson(Pagination pagination, string keyword, string F_EtId,
string F_CreatorTime_Start, string F_CreatorTime_End, string F_CreatorUserId)
{ string sql = string.Format(@"
WITH AA AS(
SELECT rec.F_ResUnit,rec.F_ResUnitID,
COUNT(0) AS zongliang,
SUM(CASE WHEN item.F_EvalState<>'4' THEN 1 ELSE 0 END) AS weizhenggai,
SUM(CASE WHEN item.F_EvalState='4' THEN 1 ELSE 0 END) AS yichuli,
SUM(CAST(item.F_DedScore AS DECIMAL(18,1))) AS koufeizhi
FROM dbo.T_EvalReportItem item
INNER JOIN dbo.T_EvalDutyRec rec
ON rec.F_ERIFId=item.F_Id
INNER JOIN dbo.T_EvalReport report
ON report.f_id=item.F_ERId AND report.F_EvalType='1'--派单类
GROUP BY rec.F_ResUnit,F_ResUnitID
)
SELECT unit.F_Code,unit.F_ResUnit,unit.F_UnitType,
CASE WHEN AA.zongliang IS NULL THEN 0 ELSE AA.zongliang END zongliang,
CASE WHEN AA.yichuli IS NULL THEN 0 ELSE AA.yichuli END yichuli,
CASE WHEN AA.weizhenggai IS NULL THEN 0 ELSE AA.weizhenggai END weizhenggai,
CASE WHEN AA.koufeizhi IS NULL THEN 0 ELSE AA.koufeizhi END koufeizhi,
CASE WHEN AA.zongliang IS NULL THEN 0 ELSE CAST((CAST(yichuli AS DECIMAL(18,2))/zongliang) AS DECIMAL(18,4)) END baifeibi
--百分比
FROM T_ResponsibilityUnit unit
LEFT JOIN AA
ON AA.F_ResUnitID = unit.F_Code
");
DataTable dt = new DataTable();
dt = DbHelper.GetTable(sql);
var data =
from item in dt.AsEnumerable().Skip(pagination.rows*(pagination.page - )).Take(pagination.rows)
select new
{
F_Code = item.Field<string>("F_Code"),
F_ResUnit = item.Field<string>("F_ResUnit"),
F_UnitType = item.Field<string>("F_UnitType"),
zongliang = item.Field<int>("zongliang"),
yichuli = item.Field<int>("yichuli"),
weizhenggai = item.Field<int>("weizhenggai"),
koufeizhi = item.Field<object>("koufeizhi"),
baifeibi = item.Field<object>("baifeibi")
};
pagination.records = dt.Rows.Count;
var dataList = new
{
rows = data.ToList(),
total = pagination.total,
page = pagination.page,
records = pagination.records
};
//IEnumerable<IGrouping<string, DataRow>> result = dt.Rows.Cast<DataRow>().GroupBy<DataRow, string>(dr => dr["A"].ToString());//按A分组
return dataList.ToJson();
}

转自:http://blog.csdn.net/joyhen/article/details/8717552

Linq 操作DataTable的更多相关文章

  1. 如何使用linq操作datatable进行分组

    使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...

  2. C# 中 Linq 操作 DataTable

    方法一:更简洁 Console.WriteLine(dt.Rows.OfType<DataRow>().First(x => x.Field<string>(" ...

  3. Linq操作DataTable

    IEnumerable<DataRow> q = from dr in dt.AsEnumerable()                          where dr.Field& ...

  4. 关于Linq对DataTable和List各自的两个集合筛选的相关操作技巧

    项目中用到了对两个集合的帅选等操作,简单总结下 1.Linq操作多个Datable 可以通过AsEnumerable()方法对DataTable进行Linq操作 //获取数据表所有数据 DataTab ...

  5. XML系列之--Linq操作带属性的XML(四)

    关于XML,之前解析过电文收发方面的,就是所谓的带表头.前缀(命名空间)SOAP格式.这次需求是解析一个xml的模板(xls内容),然后填充数据,最后保存.需要时可转换xls.pdf等文件.关于这种带 ...

  6. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  7. Linq操作非泛型集合

    我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...

  8. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解

    本文出自8天掌握EF的Code First开发系列,经过自己的实践整理出来. 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LI ...

  9. 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题

    2013-8-5 1 Linq解决DataTable按照某一列的值排序 在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的 ...

随机推荐

  1. 【高速接口-RapidIO】3、RapidIO串行物理层的包传输过程

    一.引言 前几篇文章已经谈到RapidIO的协议,串行物理层与控制符号. RapidIO协议包括读事务(NREAD),写事务(NWRITE),流写事务(SWRITE),有响应的写事务(NWRITE_R ...

  2. Spring Boot 2 - 使用CommandLineRunner与ApplicationRunner

    本篇文章我们将探讨CommandLineRunner和ApplicationRunner的使用. 在阅读本篇文章之前,你可以新建一个工程,写一些关于本篇内容代码,这样会加深你对本文内容的理解,关于如何 ...

  3. Canal学习笔记(客户端)

    前言 最近公司用到Canal来做从MySQL到Tidb的数据同步,用到HA模式Canal,记录一下HA模式的工作原理. Canal的架构模式 Canal是利用binlog日志来做数据同步,canal伪 ...

  4. 5.AutoCompleteTextView、自定义广播

    新建信息 布局:自动出来的是系统的组件,里面是listview,写ontextchanglis也行 <LinearLayout xmlns:android="http://schema ...

  5. HTML学习一_网页的基本结构及HTML简介

    HTML网页的基本结构 ```angular2html<!DOCTYPE html> 声明为 HTML5 文档<html> 元素是 HTML 页面的根元素<head> ...

  6. vue2.0 新手教程(一)

    想想自己写vue的项目也写了一年了,从vue1.0到2.0,走过不少路,填过不少坑, 下面记录一下新手从0到1的过程,本文“应该”会持续更新 首先安装vue的运行环境node 1.下载Nodejs并安 ...

  7. React 实现一个时钟

    最终效果 其实主要难点在于最左边的小时钟 指针的实现方式很简单,就是通过绝对定位将指针移到中间,然后以下边中间的位置为圆心旋转即可.代码如下: <!DOCTYPE html> <ht ...

  8. maven下载其源代码包并关联

    有时我们的源码可能会失去关联,然后需要我们在当前项目中(含有pom.xml文件的那个目录)按住shift然后在当前项目文件夹空白处右键,选择在此处打开命令输入一下命令: 1. 下载所有在POM中的的s ...

  9. 分布式事务解决方案以及 .Net Core 下的实现(上)

    数据一致性是构建业务系统需要考虑的重要问题 , 以往我们是依靠数据库来保证数据的一致性.但是在微服务架构以及分布式环境下实现数据一致性是一个很有挑战的的问题.最近在研究分布式事物,分布式的解决方案有很 ...

  10. 打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace

    MAVEN项目,在IDEA中运行正常,但是把它打成jar包后再运行就会出现异常:   Exception in thread "main" org.springframework. ...