按列表然后求和与求平均值的 c# 中的多个项目进行分组

标签: Linq C#
发布时间: 2017/2/28 21:27:27
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我需要执行相当复杂的查询,有困难去做。我有什么是被称为 LiquidityBuilder 的对象的列表︰

public class LiquidityBuilder
{
    private string _lp;
    private string _timezone;
    private int _size;
    private bool _ask;

    public string LP
    {
        get { return _lp; }
    }

    public int Size
    {
        get { return _size; }
    }

    public string Timezone
    {
        get { return _timezone; }
    }

    public bool Ask
    {
        get { return _ask; }
    }

    public LiquidityBuilder(string lp, string timezone, int size, bool ask)
    {
        _lp = lp;
        _timezone = timezone;
        _size = size;
        _ask = ask;
    }
}

数据看起来像这样︰

LP      Timezone      Size     Ask
GS       LDN        1000000  True
GS       LDN        3000000  True
GS       TOR        2000000  True
JPM      TOR        1000000  False
CS       ASIA       1000000  True
JPM      TOR        1000000  False
CITI     TOR        2000000  False

我第一次尝试组"LP"然后"时区"然后"询问",然后再总结的大小。这样的例子,

GS     (Ask)
LDN: 4000000
TOR: 2000000

这是我的有︰

var groupedLiquidityList = liquidtyTimezoneData
    .GroupBy(u => u.LP && u.Timezone && u.Ask)
    .Select(grp => grp.ToList())
    .ToList();

现在我不能分组按字符串什么也会这样做,因为性能很重要我正在开发的应用程序的最有效途径。有何建议?谢谢你 !

解决方法 1:

为了得到总和,按你的评论你可以试试这个:-

var result = liquidtyTimezoneData.GroupBy(x => new { x.LP, x.Timezone, x.Ask })
                                 .Select(x => new
                                             {
                                                 LP = x.Key.LP,
                                                 Timezone = x.Key.Timezone,
                                                 Ask = x.Key.Ask,
                                                 Sum = x.Sum(z => z.Size)
                                              });

然后简单迭代它与 foreach 循环:-

foreach (var item in result)
{
   Console.WriteLine("LP: {0}, Timezone: {1}, Ask : {2}, Sum : {3}",item.LP,item.Timezone,item.Ask,item.Sum);
}

我得到以下输出:-

enter image description here

官方微信
官方QQ群
31647020