我有以下物品。一個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