2011-11-14 76 views
0

有人可以幫我把Linq查詢並告訴我怎麼拉出來的獨特產品名稱如何通過一個屬性值的列表中刪除重複項<>

List<StatePlan> planTypes = (from ppt in context.PlanPlanTypes 
    join pt in context.PlanTypes on ppt.PlanTypeRowID equals pt.PlanTypeRowID 
    join ppts in context.PlanPlanTypeStates on ppt.PlanPlanTypeRowID equals ppts.PlanPlanTypeRowID 
    join p in context.Plans on ppt.PlanRowID equals p.PlanRowID 
    where ppts.StateCode == stateCode 
    where p.IsActive == true 
    select new StatePlan 
    { 
     PlanID = p.PlanRowID, 
     StateCode = stateCode, 
     Name = p.Name, 
     Description = p.Description, 
     Disclaimer = p.Disclaimer, 
     Sequence = p.DisplaySequence, 
     //Rates = GetRates(p.PlanRowID), 
     //Types = GetPlanTypes(p.PlanRowID, stateCode) 
    }).ToList(); 
return planTypes; 

回答

1

集團首先然後在第一個

List<StatePlan> planTypes = (from ppt in context.PlanPlanTypes 
              join pt in context.PlanTypes on ppt.PlanTypeRowID equals pt.PlanTypeRowID 
              join ppts in context.PlanPlanTypeStates on ppt.PlanPlanTypeRowID equals ppts.PlanPlanTypeRowID 
              join p in context.Plans on ppt.PlanRowID equals p.PlanRowID 
              where ppts.StateCode == stateCode 
              where p.IsActive == true 
              select new StatePlan 
              { 
               PlanID = p.PlanRowID, 
               StateCode = stateCode, 
               Name = p.Name, 
               Description = p.Description, 
               Disclaimer = p.Disclaimer, 
               Sequence = p.DisplaySequence, 
               //Rates = GetRates(p.PlanRowID), 
               //Types = GetPlanTypes(p.PlanRowID, stateCode) 
              }) 
              .GroupBy(g => g.Name) 
              .Select(s => s.First()) 
              .ToList(); 
      return planTypes; 
+0

這個偉大的工作,但是,我確實需要改變s.FirstOrDefault() –

+0

這將做太多:) –

+0

@JonHarding你爲什麼需要這種改變?我希望每個組都至少有一個元素。 – CodesInChaos

3

我不知道如果我的理解問題正確的,但如果你想有一定的不同領域的項目,你可以使用GROUPBY +第一:

seq.GroupBy(item=>item.Name).Select(group=>group.First()) 

您也可以使用投影相等比較,但我認爲這是一個有點難看。對我來說,使用Distinct意味着你不在乎你這相當於項目。而GROUPBY +首次明確指出,希望第一個。

的GroupBy,您還可以收集你的Select條款的許多項目與這樣一個名字是如何存在的其他信息,例如。


如果你只是想沒有相關的項目不同的名稱,結合選擇和獨特的:

seq.Select(item=>item.Name).Distinct() 
1
planTypes.Select(pt=>pt.Name).Distinct(); 
提供和的IEqualityComparer
0

假設在p RODUCT名在planTypes列表中Name屬性,它是一個字符串:

List<string> productNames = planTypes.Select(t => t.Name).Distinct().ToList(); 
+0

@CodeInChaos:我已經改變了答案。 – Guffa

相關問題