2

私は次のオブジェクトを持っています。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でこれを行う方法がわかりません。

4

1 に答える 1

3

グループ化キーを変更できます。これは、同じ 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
    };
于 2009-06-30T15:23:12.693 に答える