LinQ查询的问题(分组)
-
2009年4月4日 3:47是这样的,
现在我有一个数据表,结构大致如下:
----------------------------------------------------------------
日期| 列1(币种)| 列2| 列3(币种)| 列4| 列3| 列4
其中列1和列3是同样的已知的枚举内容,例如都是车辆型号,或者都是货币币种
那么:
1.如何设计一个LinQ查询列1和列3中出现的数据(且不重复)?
查询出类似如下结果:
出现的币种
人民币
美元
英镑
……
对于单一列的分组可以实现这个效果,但是对于两列或者以上的数据如何写Linq语句呢?
2.如何设计一个LinQ查询分组实现多层的分组?
查询出类似如下结果:
5月1日===========================
人民币=======================
计数 | 汇总金额
美元========================
计数 | 汇总金额
英镑========================
计数 | 汇总金额
……
5月2日===========================
人民币=======================
计数 | 汇总金额
美元========================
计数 | 汇总金额
英镑========================
计数 | 汇总金额
……
……
在问问题之前,我已经查阅了Msdn的帮助说明,关于LinQ的介绍的例子似乎比较简单,弄了半天还是没解决问题,只好请教各位了:)
谢谢:)
编程是永无止境的,向大家学习- 已移动 feiyun0112MVP, Moderator 2009年4月7日 4:44 LINQ
全部回复
-
2009年5月19日 8:261.from rs in (from it in table select new {列x=列1,列1,列2,列3,列4} ).Union(from it in table select new {列x=列3,列1,列2,列3,列4}) group rs by rs.列x into g select ....2.子查询
-
2009年5月19日 23:02
我的看法是1. 该数据表是不是应该考虑改变设计。列1和列3都表示币种的话,是不是应该合并为1列。2. 如果合并为1列了,则可以直接解决。3. 至于如何在分组后,输出统计结果。在T-SQL中可以直接使用ROLLUP或者CUBE关键字。即便是不改表结构,例如还是如下的结果CREATE TABLE [dbo].[Test]([日期] [datetime] NULL,[币种1] [nchar](10) NULL,[金额1] [decimal](18, 0) NULL,[币种2] [nchar](10) NULL,[金额2] [decimal](18, 0) NULL) ON [PRIMARY]还是可以通过先将其转变为我们需要的结构,然后做Group的SELECT 日期,币种,SUM(金额) FROM(SELECT 日期,币种1 AS 币种,金额1 AS 金额 FROM TESTUNION ALLSELECT 日期,币种2,金额2 FROM TEST) AS PGROUP BY 日期,币种WITH ROLLUPORDER BY 日期,币种大致的查询结果是日期 币种----------------------- ---------- ---------------------------------------NULL NULL 750002009-01-01 00:00:00.000 NULL 90002009-01-01 00:00:00.000 美元 20002009-01-01 00:00:00.000 人民币 40002009-01-01 00:00:00.000 日元 30002009-01-02 00:00:00.000 NULL 230002009-01-02 00:00:00.000 美元 200002009-01-02 00:00:00.000 人民币 30002009-01-03 00:00:00.000 NULL 430002009-01-03 00:00:00.000 欧元 400002009-01-03 00:00:00.000 人民币 3000【这里不能截图,请自己运行脚本测试一下】我的观点是,有些东西应该在数据库这一层就处理好,善用LINQ,呵呵- 已标记为答案 微软中文技术论坛Moderator 2009年6月30日 3:43