如何返回GroupBy值列表

时间:2018-02-23 11:14:22

标签: c# asp.net-mvc-4 lambda

我正在尝试返回GroupBy中的值列表,或者甚至只返回GroupBy中的值的唯一ID,但不太明白如何。

这是我到目前为止所拥有的

var adjustmentsToDelete = adjustments.GroupBy(x => new {x.QueryId, x.FeeTypeId})
                         .Where(group => group.Count() > 1).ToList();

我有一个客户提出查询时对订单进行调整的表格。因此,我想通过QueryId和FeeTypeId对调整进行分组,并返回所有分组记录或至少每个分组记录的唯一ID(adjustmentId)。

感谢任何帮助,

谢谢:)

3 个答案:

答案 0 :(得分:0)

您将收到IGrouping<TKey, TElement>的可枚举数据。

您可以对结果进行枚举,如下所示:

foreach ( var group in adjustmantsToDelete )
{
    //access group key
    Debug.WriteLine(group.Key.QueryId);
    Debug.WriteLine(group.Key.FeeTypeId);

    //enumerate items in the group
    foreach ( item in group ) 
    {
         //item's type is the same as the 
         //source collection item type
    } 
} 

答案 1 :(得分:0)

尝试以下操作并选择您想要的字段。

var adjustmentsToDelete = adjustments.GroupBy(x => new {x.QueryId, x.FeeTypeId})
                                  .Where(group => group.Count() > 1)
                                  .Select(x => new {x.Key.QueryId, x.Key.FeeTypeId}).ToList();

您可以针对多个文件迭代以上结果,如下所示。

foreach(var item in adjustmentsToDelete)
{
    foreach(var item in adjustmentsToDelete.QueryId)
    {
        //Use QueryId
    }

    foreach(var item in adjustmentsToDelete.FeeTypeId)
    {
        //Use FeeTypeId 
    }
}

如果您想选择任何单个字段而不是尝试此字段。

var adjustmentsToDelete = adjustments.GroupBy(x => new {x.QueryId, x.FeeTypeId})
                                  .Where(group => group.Count() > 1)
                                  .Select(x => new {x.Key.QueryId}).ToList();

比单个字段使用您的结果如下。

foreach(var item in adjustmentsToDelete)
{
    //use this item object as per it's properties.
}

答案 2 :(得分:0)

var adjustmentsToDelete = adjustments.GroupBy(x => new {x.QueryId, x.FeeTypeId})
                                  .Where(group => group.Count() > 1);

你的LINQ没问题。您可以设置条件和分组但不能获得结果。

如果您将此视为sql语句,则表示您尚未编写select部分

select

上添加LINQ声明
   .Where(group => group.Count() > 1)
   .Select(x => new {x.Key.QueryId, x.Key.FeeTypeId}).ToList();