通过数据库中的键查询最高值

时间:2012-11-05 17:08:49

标签: c# .net sql linq

使用下表:

+-------------+-----------+---------+
|  Parent_ID  |  Item_ID  |  Count  |
+-------------+-----------+---------+
|      1      |     1     |    1    |
|      1      |     1     |    5    |
|      1      |     1     |    4    |
|      1      |     2     |    7    |
|      1      |     2     |    2    |
|      2      |     1     |    2    |
|      2      |     1     |    3    |
|      2      |     2     |    2    |
|      2      |     2     |    4    |
+-------------+-----------+---------+

我想获得给定Parent_IDItem_ID的最高可用数量,如下所示:

+-------------+-----------+---------+
|  Parent_ID  |  Item_ID  |  Count  |
+-------------+-----------+---------+
|      1      |     1     |    5    |
|      1      |     2     |    7    |
|      2      |     1     |    3    |
|      2      |     2     |    4    |
+-------------+-----------+---------+

我如何在C#中使用LINQ / SQL来做这件事?例如,我希望父ID为1的最高项目数。这可能是这样的:

int parentId = 1;
var counts = from c in database.Items where parentId == c.parentId 
//this gets all counts from items for parent id 1, but I am just looking
//for the highest count per item for parent id 1

4 个答案:

答案 0 :(得分:1)

SELECT Parent_ID, Item_ID, MAX(Count)
FROM ...
GROUP BY Parent_Id, Item_ID

答案 1 :(得分:1)

select parent_id, 
       item_id, 
       max(count) as count
from your_table
group by parent_id, item_id

答案 2 :(得分:0)

使用LINQ2SQL我想你想要这样的东西:

var counts = database.Items.GroupBy(p => p.parentId).Max(p => p.Key);

答案 3 :(得分:0)

要按多个字段分组,您可以使用匿名对象进行分组:

var counts = from item in database.Items
             group item by new { item.ParentId, item.ItemId } into itemGroup
             select new Item()
                    {
                        ParentId = itemGroup.Key.ParentId,
                        ItemId = itemGroup.Key.ItemId,
                        Count = itemGroup.Max(x => x.Count)
                    };
相关问题