简单的LINQ问题:

zengjd 2010-01-27 11:21:04
DataTable中的表结构是这样的:
ID Name ACount BCount CCount Date,Alarm

其中:Alarm是布尔型,

想得到如下结果:
Select ID,Name,Sum(ACount),Sum(BCount),Sum(CCount),Min(date),Alarm From Tbl
上面的结果中,只有被Group by的行中有一个Alram = true,结果集中就为True。

请问LINQ怎么写?


...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2010-01-27
  • 打赏
  • 举报
回复
数据类型错了,重贴:
dt.Rows.Cast<DataRow>()
.GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
.Select((g) => new { g.Key.ID, g.Key.Name, ACount = g.Sum((t) => (decimal)t["ACount"]), BCount = g.Sum((t) => (decimal)t["BCount"]), CCount = g.Sum((t) => (decimal)t["CCount"]), Date = g.Min((t) => (DateTime)t["Date"]) });
qldsrx 2010-01-27
  • 打赏
  • 举报
回复
那就是Linq TO Objcet了,而且你这种方式已经很不简单了。

dt.Rows.Cast<DataRow>()
.GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
.Select((g) => new { g.Key.ID, g.Key.Name, ACount = g.Sum((t) => (decimal)t["ACount"]), BCount = g.Sum((t) => (decimal)t["BCount"]), CCount = g.Sum((t) => (decimal)t["CCount"]), Date = g.Min((t) => (decimal)t["Date"]) });
zengjd 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qldsrx 的回复:]
你是要LINQ TO SQL 还是LINQ TO Object啊
[/Quote]

LINQ操作的对象是DataTable
因该是LinQ TO DataSet 吧
qldsrx 2010-01-27
  • 打赏
  • 举报
回复
你是要LINQ TO SQL 还是LINQ TO Object啊
danjiewu 2010-01-27
  • 打赏
  • 举报
回复
MAX(Alarm)可不可以?
qldsrx 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 zengjd 的回复:]
只有被Group by的行中有一个Alram = true,结果集中就为True。
[/Quote]
是不是过滤掉false的结果,我反正是这么理解的。
qldsrx 2010-01-27
  • 打赏
  • 举报
回复
dt.Rows.Cast<DataRow>()
.GroupBy((t) => new { ID = (int)t["ID"], Name = (string)t["Name"], Alarm = (bool)t["Alarm"] == true })
.Select((g) =>
{
DataRow dr = permissionTable.NewRow();
dr["ID"] = g.Key.ID;
dr["Name"] = g.Key.Name;
dr["ACount"] = g.Sum((t) => (decimal)t["ACount"]);
dr["BCount"] = g.Sum((t) => (decimal)t["BCount"]);
dr["CCount"] = g.Sum((t) => (decimal)t["CCount"]);
dr["Date"] = g.Min((t) => (DateTime)t["Date"]);
dr["Alarm"] = g.Key.Alarm;
return dr;
});
zengjd 2010-01-27
  • 打赏
  • 举报
回复
还有人会这个问题么?
zengjd 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qldsrx 的回复:]
数据类型错了,重贴:
C# codedt.Rows.Cast<DataRow>()
.GroupBy((t)=>new { ID= (int)t["ID"], Name= (string)t["Name"], Alarm= (bool)t["Alarm"]==true })
.Select((g)=>new { g.Key.ID, g.Key.Name, ACount= g.Sum((t)=> (decimal)t["ACount"]), BCount= g.Sum((t)=> (decimal)t["BCount"]), CCount= g.Sum((t)=> (decimal)t["CCount"]), Date= g.Min((t)=> (DateTime)t["Date"]) });
[/Quote]

还有个Alarm字段呢
要求是:只有被Group by的行中有一个Alram = true,结果集中就为True。

另外,这么些最后的结果是一个匿名类型。我希望得到的结果是DataRow
应该怎么写呢?
LinqSamples 这些示例能够帮助您快速地了解 LINQ。对于具有一定 LINQ 经验的人员来说,它们还可以作为参考和指南。此外,还包括了几种实用工具。它们位于 LinqSamples 文件夹中。 •DynamicQuery: 在运行时创建 LINQ 查询的代码。 •LinqToNorthwind: 关于如何使用 LINQ To SQL 查询数据库的基本示例。 •LinqToXmlDataBinding: 将 LINQ to XML 代码绑定到 WPF 控件。 •ObjectDumper: 用于将 LINQ 查询的输出以文本模式写入屏幕的实用工具。 •PasteXmlAsLinq: 能够自动将 XML 转换为 LINQ to XML 的 Visual Studio 外接程序。 •QueryVisualizer: 使 LINQ to SQL 开发人员能够看到其查询的 SQL 代码,并能在网格中查看查询的结果。 •Reflector: 使用 LINQ 对使用反射 API 的代码中的对象进行正确的查询。 •RSS: 此示例可作为聚合若干 RSS 源的小型 Web 服务器。 •SampleQueries: 这是最重要的示例,其中包含了 500 多个关于如何在 LINQ to Objects、LINQ to SQL、LINQ to XML 和 LINQ to DataSet 中使用各个查询运算符的例子。 •SimpleLambdas: 几个关于如何编写和使用 lambda 表达式的示例。 •SimpleLinqToObjects: 简单LINQ 示例。为您显示使用 LINQ to Objects 创建内存对象的简单查询是多么简单。 •SimpleLinqToXml: 开始使用 LINQ to XML。 •WebServiceLinqProvider(TerraService): 用于 TerraServer-USA Web 服务的自定义 LINQ 提供程序和客户端。 •Whitepapers: 以下白皮书以 Word 格式存储在此目录中: ◦LINQ 项目概述 ◦LINQ to SQL 概述(适用于 C# 和 VB) ◦标准查询运算符 ◦LINQ to XML 概述 •WinFormsDataBinding: 学习如何在 Windows 窗体中使用网格显示 LINQ 查询。它包括一个一对多查询示例。 •XQuery: 另一个简单LINQ to XML 示例查询。此示例显示编写 LINQ to XML 查询所需的最少代码。 LINQ 示例数据库连接问题 如果开发计算机上安装有 SQL Server Express,则这些示例应无需修改即可正常发挥作用。下面是一个 备用连接字符串,如果不使用 SQL Express,但有 SQL Server 可供使用,则可对该字符串进行修改,以用于自己的用途。只要 test 一词显示在示例连接字符串中,您就可能需要修改该单词。 string connString = "server=test;database=northwind;user id=test;password=test"; 对于某些 SQL Express 安装,您可能无权启动用户实例。如果在此情况下收到错误消息,请尝试从连接字符串中删除子句 “;user instance = true”。 确保要访问的 northwind 数据库的副本未标记为只读。如有必要,请浏览到尝试访问的 NORTHWIND.MDF 的副本,右击该文件,然后选择“属性”。清除 只读特性。 用户已报告,在某些运行速度较慢的计算机上,或在使用虚拟 PC 时,某些数据库应用程序在首次运行时出错。请尝试运行该示例两次或三次。 未将 LDF (日志)文件随示例中包含的 Northwind 数据库自定义副本一起提供。特意这样做的目的是为了使 LDF 与 MDF 文件不会失去同步。运行使用该数据库的示例时,或从 Visual Studio 中的服务器资源管理器连接到该数据库时,将会自动创建 LDF 文件。如果在未先创建日志文件的情况下使用 SQL Server Management Studio,则在连接到 MDF 文件时,可能会遇到问题
清晰完整PDF版本,是我从网上买来的 共 80MB,分为7个分卷 在 CSDN 上只有我整个是清晰完整的 LINQ 高级编程 .NET 2010 SQL LINQ高级编程 6/7 原价:48.00元 作者:克莱因 译者:李宝 出版社: 清华大学出版社 出版日期: 2009年 ISBN:9787302198857 -------------------------------------------------------------------------------- 本书由数据库专家scott Klein编写,讲述了如何有效地使用LINQ来查询XML、SQL数据库、ADO.NET DataSet和其他数据源,并对此技术进行了更深入的探讨,展示LINQ够显著地改进应用程序的性能。 本书首先介绍TLINQ和Visual Studio 2008、LINQ相关的语言特性以及LINQ查询和LINQ标准查询操作符;然后展示了如何在c#和Visual Basic中使用LINQ to XML编程,以及如何使用LINQ to XML处理其他数据模型;接下来依次介绍LINQ to SQL查询、高级查询概念、LINQ to Entities和LINQ to DataSets。所有这些颇具价值的见解为您提供了强有力的新工具,从而使您能够轻松地扩展和访问数据库中的信息。 内容提要 --------------------------------------------------------------------------------   本书结合具体实例详述了LINQ高级编程所涉及的各个方面。共分为 LINQ概述、LINQ to XML、LINQ to SQL及附录四大部分,每一部分的各个章节结构清晰,层次明显。本书并不是对一种新技术的简单介绍,而是力求使读者通过本书的学习能够立即将LINQ应用到自己的项目开发中。 本书的内容深入浅出,循序渐进,不仅适合LINQ初学者,也可以作为数据库开发人员进阶的参考书。 目录 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介  第1章 LINQ项目   1.1 LINQ概述   1.2 标准查询操作符   1.3 LINQ to XML概述   1.4 LINQto SQL概述   1.5 本章小结  第2章 Visual Studio 2008简介   2.1 Visual Studi0 2008   2.2 语言相关的LINQ特性   2.3 本章小结  第3章 LINQ查询   3.1 LrNQ查询简介   3.2 查询语法和方法语法的区别   3.3 使用查询语法和方法语法   3.4 本章小结  第4章 LINQ标准查询操作符   4.1 概述   4.2 标准查询操作符   4.3 使用查询操作符   4.4 本章小结 第Ⅱ部分 LINQ to XML  第5章 理解LINQ to XML   5.1 L]NQ t0XML概述   5.2 LrNQ to XML编程基础   5.3 LINQ to XML编程概念   5.4 LINQtoXML与其他XML技术的比较   5.5 本章小结  第6章 LINQ to XML编程  第7章 LINQ to XML和其他LINQ  第8章 LINQ to XML编程高级  第9章 LINQ to XML和Visual Basic.NET 第Ⅲ部分 LINQ to SQL  第10章 LINQ to SQL概述  第11章 LINQ to SQL查询  第12章 高级查询概念  第13章 实体类  第14章 LINQ to DataSet  第15章 LINQ to SQL高级论题 第Ⅳ部分 附录 作者介绍 -------------------------------------------------------------------------------- SCott K Jein,数据库专家、资深顾问,他对SQL Server、.NET和XML都有着浓厚的兴趣。除本书外,他的著作还包括Professional SQL Server 2005 XML和Professiona/WCF Programming(本书已由清华大华出版社引进并出版,中文版书名为《WCF高级编程》)。除了出版图书之外,Scott Klein还为SOL PASS Community Connector撰写半月刊专题文章,并经常在Wrox网站(www.Wrox.corn)和TopXML网站(www.TopXML.com)上发表文章,在SQL Server和.NET用户群里发言。您可以通过ScottKlein@SalXml.com与他交流。 文摘 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介 第1章 LINQ项目 我经常听说这样的问题,“什么是LINQ?”,“它是用来做什么的?”,“我们为什么需要它?”。第一个问题(以及随后的其他两个问题)的答案是,语言集成查询(LanguageIntegrated Query,LINQ)是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤和执行操作都提供了底层的基本查询架构。LINQ可查询的数据源包括XML(可使用LINQ to XML,即原来的XLINQ)、关系数据(使用LINQ to SQL,即先前的DLINQ)、AD0.NET DataSets(使用LINQ to DataSet),以及内存中的数据。 理解这项奇妙的新技术的最好方法就是了解一些关于LINQ如何出现以及为什么出现的历史和背景。 虽然人们最早听说LINQ是在2005年秋季,但实际上2003年初微软就启动了LINQ的开发。LINQ的总体目标是使开发人员更容易地处理SQL和XML数据,这主要是因为在关系数据(数据库)及与其通信(即对关系数据进行处理)的编程语言之间没有任何联系,对于XML同样也是如此。 大多数开发人员现在都能理解面向对象(object.oriented,OO)编程及其相关技术和特性,如类、方法、对象等。面向对象编程在过去十多年就已有巨大的发展,但即使在当前,如果要操纵的信息不是使用00方式定义的或本身就不具有00特性,通过O0技术使用和整合这些信息时仍然存在难以逾越的鸿沟。
清晰完整PDF版本,是我从网上买来的 共 80MB,分为7个分卷 在 CSDN 上只有我整个是清晰完整的 LINQ 高级编程 .NET 2010 SQL LINQ高级编程 2/7 原价:48.00元 作者:克莱因 译者:李宝 出版社: 清华大学出版社 出版日期: 2009年 ISBN:9787302198857 -------------------------------------------------------------------------------- 本书由数据库专家scott Klein编写,讲述了如何有效地使用LINQ来查询XML、SQL数据库、ADO.NET DataSet和其他数据源,并对此技术进行了更深入的探讨,展示LINQ够显著地改进应用程序的性能。 本书首先介绍TLINQ和Visual Studio 2008、LINQ相关的语言特性以及LINQ查询和LINQ标准查询操作符;然后展示了如何在c#和Visual Basic中使用LINQ to XML编程,以及如何使用LINQ to XML处理其他数据模型;接下来依次介绍LINQ to SQL查询、高级查询概念、LINQ to Entities和LINQ to DataSets。所有这些颇具价值的见解为您提供了强有力的新工具,从而使您能够轻松地扩展和访问数据库中的信息。 内容提要 --------------------------------------------------------------------------------   本书结合具体实例详述了LINQ高级编程所涉及的各个方面。共分为 LINQ概述、LINQ to XML、LINQ to SQL及附录四大部分,每一部分的各个章节结构清晰,层次明显。本书并不是对一种新技术的简单介绍,而是力求使读者通过本书的学习能够立即将LINQ应用到自己的项目开发中。 本书的内容深入浅出,循序渐进,不仅适合LINQ初学者,也可以作为数据库开发人员进阶的参考书。 目录 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介  第1章 LINQ项目   1.1 LINQ概述   1.2 标准查询操作符   1.3 LINQ to XML概述   1.4 LINQto SQL概述   1.5 本章小结  第2章 Visual Studio 2008简介   2.1 Visual Studi0 2008   2.2 语言相关的LINQ特性   2.3 本章小结  第3章 LINQ查询   3.1 LrNQ查询简介   3.2 查询语法和方法语法的区别   3.3 使用查询语法和方法语法   3.4 本章小结  第4章 LINQ标准查询操作符   4.1 概述   4.2 标准查询操作符   4.3 使用查询操作符   4.4 本章小结 第Ⅱ部分 LINQ to XML  第5章 理解LINQ to XML   5.1 L]NQ t0XML概述   5.2 LrNQ to XML编程基础   5.3 LINQ to XML编程概念   5.4 LINQtoXML与其他XML技术的比较   5.5 本章小结  第6章 LINQ to XML编程  第7章 LINQ to XML和其他LINQ  第8章 LINQ to XML编程高级  第9章 LINQ to XML和Visual Basic.NET 第Ⅲ部分 LINQ to SQL  第10章 LINQ to SQL概述  第11章 LINQ to SQL查询  第12章 高级查询概念  第13章 实体类  第14章 LINQ to DataSet  第15章 LINQ to SQL高级论题 第Ⅳ部分 附录 作者介绍 -------------------------------------------------------------------------------- SCott K Jein,数据库专家、资深顾问,他对SQL Server、.NET和XML都有着浓厚的兴趣。除本书外,他的著作还包括Professional SQL Server 2005 XML和Professiona/WCF Programming(本书已由清华大华出版社引进并出版,中文版书名为《WCF高级编程》)。除了出版图书之外,Scott Klein还为SOL PASS Community Connector撰写半月刊专题文章,并经常在Wrox网站(www.Wrox.corn)和TopXML网站(www.TopXML.com)上发表文章,在SQL Server和.NET用户群里发言。您可以通过ScottKlein@SalXml.com与他交流。 文摘 -------------------------------------------------------------------------------- 第Ⅰ部分 LINQ项目简介 第1章 LINQ项目 我经常听说这样的问题,“什么是LINQ?”,“它是用来做什么的?”,“我们为什么需要它?”。第一个问题(以及随后的其他两个问题)的答案是,语言集成查询(LanguageIntegrated Query,LINQ)是一系列标准查询操作符的集合,这些操作符几乎对每一种数据源的导航、过滤和执行操作都提供了底层的基本查询架构。LINQ可查询的数据源包括XML(可使用LINQ to XML,即原来的XLINQ)、关系数据(使用LINQ to SQL,即先前的DLINQ)、AD0.NET DataSets(使用LINQ to DataSet),以及内存中的数据。 理解这项奇妙的新技术的最好方法就是了解一些关于LINQ如何出现以及为什么出现的历史和背景。 虽然人们最早听说LINQ是在2005年秋季,但实际上2003年初微软就启动了LINQ的开发。LINQ的总体目标是使开发人员更容易地处理SQL和XML数据,这主要是因为在关系数据(数据库)及与其通信(即对关系数据进行处理)的编程语言之间没有任何联系,对于XML同样也是如此。 大多数开发人员现在都能理解面向对象(object.oriented,OO)编程及其相关技术和特性,如类、方法、对象等。面向对象编程在过去十多年就已有巨大的发展,但即使在当前,如果要操纵的信息不是使用00方式定义的或本身就不具有00特性,通过O0技术使用和整合这些信息时仍然存在难以逾越的鸿沟。
我们读取和写入Excel 经常使用NPOI工具,如果我们的需求只是需要读取Excel,可以考虑使用LinqToExcel这个组件。这个组件用起来简单、实用、操作方便,而且结合了Linq的查询特性,excel版本不仅支持2003,而且连wps表格都支持(后缀名为.et),csv文件更不在话下了。项目地址:https://github.com/paulyoder/LinqToExcel在使用之前:1.添加引用,通过Nuget 来添加是最方便的了,这里要注意的32/64问题LinqToExcel.dll Remotion.Data.Linq.dll2.添加命名空间using LinqToExcel;//取得数据,只需要一行代码var execelfile = new ExcelQueryFactory(sample.xls);  如何取到相应的表呢?//紧接楼上var tsheet = excelfile.Worksheet(0);  此时得到是没有进行相应映射的(row)行列集合.一个简单的查询:var excelfile = new ExcelQueryFactory("1.xls"); var tsheet = excelfile.Worksheet(0);<br> //查询30岁以上的人的名字 var query = from p in tsheet where p["Age"].Cast<int>() > 30 select p; foreach (var item in query) { Console.WriteLine("Name is {0}",item[0].Value.ToString()); } Console.Read();    那如何转成相应的实体集合呢? LinqToExcel还具有Mapping 功能,如果类的属性名和Excel里的表头名字如果是英文,(区分大小写)必须与属性名保持一致,支持中文属性名和表头。接着就是一个常遇到的需求,虽然说 Excel 的字段定义是英文,但是读出来的时候必须要是更有意义的字词,这时候就可以利用 LinqToExcel 的 AddMapping 功能来达到。 github:https://github.com/paulyoder/LinqToExcelnuget: https://www.nuget.org/packages/LinqToExcel/ 和 https://www.nuget.org/packages/LinqToExcel_x64/  标签:LinqToExcel

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧