私は次のオブジェクトを持っています。IEnumerable <Agency
> Agencies には 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 のみが含まれています。
ID だけでなく、クエリで BusinessUnit から "名前" を返すこともできる必要があります。グループ化と組み合わせてLINQでこれを行う方法がわかりません。