2012-07-06 58 views
1

我有一個LINQ to Entities查詢,我只需要返回「ProgramYears」的唯一實例,以便我可以在我的視圖中遍歷它們。我不知道如何改變這一點,以免重複。Group BY - 返回IEnumerable唯一的元素

var data = from SurveyProgramModel in surveyProgramRepository.Get() 
         where SurveyProgramModel.ProgramYear == ProgramYear 
         group SurveyProgramModel by SurveyProgramModel.ProgramTypeId into programTypeGroup 
      select new ProgramTypeViewModel() 
      { 

       ProgramTypeIds = programTypeGroup.Key, 
       ProgramIds = programTypeGroup.Select(r => r.ProgramId), 
       ProgramYears = programTypeGroup.Select(r => r.ProgramYear), 
       ProgramTitles = programTypeGroup.Select(r => r.ProgramTitle), 
       ProgramTypes = programTypeGroup.Select(r => r.ProgramType.ProgramType).Distinct(), 
      }; 
+0

只是唯一的實例。例如,2010,2011,2012 – user547794 2012-07-06 19:52:23

+0

您示例中的where子句將可能的年限限制爲1,所以您不能只將包含'ProgramYear'的列表分配給'ProgramYears'嗎? – 2012-07-06 20:31:11

回答

2

您可以使用Distinct運算符嗎?

(from SurveyProgramModel in surveyProgramRepository.Get() 
where SurveyProgramModel.ProgramYear == ProgramYear 
group SurveyProgramModel by SurveyProgramModel.ProgramTypeId) 
.Distinct() 
.Select(programTypeGroup => new ProgramTypeViewModel() 
    { 
     ProgramTypeIds = programTypeGroup.Key, 
     ProgramIds = programTypeGroup.Select(r => r.ProgramId), 
     ProgramYears = programTypeGroup.Select(r => r.ProgramYear), 
     ProgramTitles = programTypeGroup.Select(r => r.ProgramTitle), 
     ProgramTypes = programTypeGroup.Select(r => r.ProgramType.ProgramType).Distinct(), 
    }; 
0

這會給你只是不同的幾年像你想:

var years = surveyProgramRepository.Get() 
      .Select(x => x.ProgramYear).Distinct(); 

或在情況下,我誤解了問題,你想要的不同年每組ProgramYears屬性,可以做如下改變你的Select方法:

... 
ProgramYears = programTypeGroup.Select(r => r.ProgramYear).Distinct(), 
... 

(但正如在評論中指出,THI因爲你已經使用where篩選了一年,所以每個組只有一年的ProgramYears