0
我有一張表,其中包含PlanID &位置爲兩列,具有「多對一」關係。 也就是說,一個planID可以有多個位置。Linq:將行分組並將它們返回給匿名集合
的樣本數據可能如下:
PlanID Location
------ --------
111 Blr
111 Bom
222 Chn
333 Hyd
111 Bhu
333 Ctc
我試圖通過獨特PlanIDs組他們&返回匿名收集(比如UniquePlans)象下面這樣:
PlanID Location
------ --------
111 Blr
111 Bom
111 Bhu
PlanID Location
------ --------
333 Hyd
333 Ctc
PlanID Location
------ --------
222 Chn
一旦我有結果收集準備好後,我需要爲每個項目執行一些操作,例如:
foreach (var planID in uniquePlans)
{
foreach (var loc in PlanLocation)
{
//TODO : WCF call to fetch some detail based on planID & PlanLocation
// pDetail = GetPlanDetails(planID, PlanLocation);
}
}
我正在使用實體框架從SQL服務器DB &中使用下面的代碼獲取數據我能夠找到所有唯一的PlanID。
var uniquePlanCollections = myEntities.PlanDetails.Select(p => p.PlanID).Distinct();
但在那之後如何將它們組合(使用LINQ或lambda EXP),這樣我可以使用他們我foreach循環裏面我沒有得到任何線索。
我以前也試圖像下面,但它不工作...
var test = from r in myEntities.PlanDetails
group r by new
{
r.PlanID,
r.Location
} into g
select new
{
PlanID= g.Key.PlanID, //Can I use distinct here?
Location = g.Key.Location
};
我不知道你是如何確保它將被分組到三個不同的獨特組/集合。你能解釋那部分代碼嗎?如果它這樣做的話? – Biki
[This is](http://geekswithblogs.net/BlackRabbitCoder/archive/2011/03/24/c.net-little-wonders-the-tolookup-linq-extension-method.aspx)非常好的文章'ToLookup()'方法。它會將您的收藏夾分成三個不同的收藏夾(基於傳遞給該方法的參數) –
但是,當我測試上述代碼時,我發現分組正在發生正確,但是在每個組中,只有第一個位置重複多次,而不是唯一的位置(例如:對於PlanID:333組,位置「Hyd」重複兩次,而不是「Hyd」和「CTC」。] – Biki