gpt4 book ai didi

c# - 如何在此 LINQ 查询中添加额外项?

转载 作者:行者123 更新时间:2023-11-30 22:49:37 25 4
gpt4 key购买 nike

我有以下对象。一个 IEnumerable <Agency > 机构,然后包含 BusinessUnits 和 BusinessUnits 包含客户:

public class Agency  
{
public int ID;
public IEnumerable<BusinessUnit> BusinessUnits;
}

public class BusinessUnit
{
public string Name;
public int ID;
public decimal AmountSpent;
public IEnumerable<Client> Clients;
}

public class Client
{
public string Name;
public int ID;
public decimal AmountSpent;
}

我一直在使用此查询将我的 BusinessUnits 合并到代理机构下,这样我就可以显示“所有代理机构:”我的数据来自:

Agency1
++BusinessUnit1 - $20
++++Client1 - $10
++++Client2 - $10

Agency2
++BusinessUnit2 - $20
++++Client1 - $20

Agency3
++BusinessUnit1 - $10
++++Client5 - $5
++++Client6 - $5
++BusinessUnit2 - $25
++++Client1 - $25

为此:

All Agencies
++BusinessUnit1 - $30
++++Client1 - $10
++++Client2 - $10
++++Client5 - $5
++++Client6 - $5

++BusinessUnit2 - $45
++++Client1 - $20
++++Client1 - $25

我一直在使用以下 LINQ 查询来执行此操作:

var groupings =
from agency in agencies
from businessUnit in agency.BusinessUnits
from client in businessUnit.Clients
group client by businessUnit.ID into clients
select clients;

var businessUnits =
from grouping in groupings
select new
{
ID = grouping.Key,
AmountSpent = grouping.Sum(client => client.AmountSpent),
Clients = grouping
};

Console.WriteLine("All Agencies");

foreach (var businessUnit in businessUnits)
{
Console.WriteLine("++BusinessUnit{0} - ${1}",
businessUnit.ID,
businessUnit.AmountSpent);

foreach (var client in businessUnit.Clients)
{
Console.WriteLine("++++Client{0} - ${1}", client.ID, client.AmountSpent);
}
}

我的问题是:如何在返回的对象中同时包含 BusinessUnit 和客户的“名称”字段。截至目前,我生成的 BusinessUnits 仅包含它们从分组键中获得的 ID。

我还需要能够在我的查询中从 BusinessUnit 返回“名称”,而不仅仅是它的 ID。我不确定如何将 LINQ 与分组结合使用。

最佳答案

您可以更改分组键 - 这假设同一 ID 不会有多个名称,反之亦然:

var groupings =
from agency in agencies
from businessUnit in agency.BusinessUnits
from client in businessUnit.Clients
group client by new { businessUnit.ID, businessUnit.Name } into clients
select clients;

var businessUnits =
from grouping in groupings
select new
{
ID = grouping.Key.ID,
Name = grouping.Key.Name,
AmountSpent = grouping.Sum(client => client.AmountSpent),
Clients = grouping
};

关于c# - 如何在此 LINQ 查询中添加额外项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1064284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com