使用C#和LINQ对值进行分组

时间:2010-02-25 23:03:52

标签: c# linq

我有一个LINQ问题。假设我有一个包含以下值的数据库:

===================
Date,product,orders
-------------------
1/2/2003,apple,3
1/2/2003,orange,5
1/3/2003,orange,6
1/4/2003,grape,2
===================

如何使用LINQ获取按日期对项目进行分组的结果,并将它们放入如下所示的变量中:

==========================
Date, Apple, Orange, Grape
--------------------------
1/2/2003,3,5,0
1/3/2003,0,6,0
1/3/2003,0 0,2
==========================

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:4)

这是我做的测试:

var data = new []{
    new { Date = new DateTime(2003, 1, 2), Product = "apple", Orders = (int?) 3 },
    new { Date = new DateTime(2003, 1, 3),Product =  "orange", Orders = (int?) 5 },
    new { Date = new DateTime(2003, 1, 4), Product = "grape", Orders = (int?) 2 },
    new { Date = new DateTime(2003, 1, 4), Product = "grape", Orders = (int?) null }
};

var result = data.GroupBy(x => x.Date)
                 .Select(g => new {
                   Date = g.Key,
                   Apples = g.Where(x => x.Product == "apple").Sum(x => x.Orders),
                   Oranges = g.Where(x => x.Product == "orange").Sum(x => x.Orders),
                   Grapes = g.Where(x => x.Product == "grape").Sum(x => x.Orders)
                 });

测试数据的结果不包含空值,但苹果,橘子和葡萄的结果为0。

答案 1 :(得分:0)

使用Linq to SQL,你可以做类似的事情;

var query = from p in products order by p.Date select p;

我不确定你的意思是“把它们变成变量”。

答案 2 :(得分:0)

试试这个:

var x = from tb in mytable
        group date by tb.date;