c# - 按列表中的多个项目进行分组,然后求和并平均 C#

标签 c# linq list group-by

我需要执行相当复杂的查询,但执行起来很困难。我拥有的是一个名为 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();

现在我无法按字符串进行分组,这也是最有效的方法,因为性能对于我正在开发的应用程序很重要......有什么建议吗?谢谢!

最佳答案

要获得总和,根据您的评论,您可以尝试以下操作:-

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

关于c# - 按列表中的多个项目进行分组,然后求和并平均 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407431/

相关文章:

C# 如何在运行时使用 XElement 使用 Dynamic Linq 创建自定义(动态)类

c++迭代对象列表并删除对象

c++ - 是否有任何优雅的方法来遍历其元素位置可以更改的列表?

c# - 真的不可能使用返回类型重载吗?

c# - 将字节数组从一个站点发送到另一个站点(并返回)

c# - 以编程方式添加多个扩展器事件将不起作用

c# - FileSystemWatcher 对硬盘有什么影响?

c# - X文档文件名

c# - 如何使用 LINQ .ToUpper() 数组的每个元素?

r - 如何用R中的递归函数填充列表?