我有以下物品。一个IEnumerable <Agency
>代理机构,然后包含BusinessUnits和BusinessUnits包含客户端:如何在此LINQ查询中添加额外的项目?
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和Client的“Name”字段。截至目前,我所得到的BusinessUnits仅包含他们从分组关键字获得的ID。
我还需要在查询中能够从BusinessUnit中返回“Name”,而不仅仅是它的ID。我不知道如何结合使用LINQ和分组。
这一切都取决于该数据是从哪里来的,但这里是一个想法:您可能会考虑重组您目前的课程设计,因为它涉及重复的信息(名称,可能更多将来)。如何摆脱每个课程的集合和AmountSpent,并添加一个新的类如Expenditures(或更适合的东西)?这可以包含对每个参与机构,BusinessUnit和客户的参考以及AmountSpent。这种方法应该使查询和分组更容易,但可能会导致我在应用程序中不知道的其他问题。 – 2009-06-30 15:39:29