我需要执行相当复杂的查询,但执行起来很困难。我拥有的是一个名为 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);
}
我得到以下输出:-
关于c# - 按列表中的多个项目进行分组,然后求和并平均 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407431/