2013-05-28 3 views
0

Я группирую некоторые данные вместе, чтобы отобразить его на первой странице (ASPX).System.InvalidCastException: невозможно лить объект типа «System.Linq.GroupedEnumerable

У меня есть следующий код: -

IEnumerable<ReportQuestion> questionSubjectGrps = 
    questionsBll.GetReportQuestions() 
       .Where(x => x.VersionId == iLatestVersion); 

reportQuestionsList = 
    questionSubjectGrps.GroupBy(q => q.SubjectId, 
           (qid, qs) => qs.GroupBy(q => q.ParentId)); 

foreach (ReportQuestion reportQuestion in reportQuestionsList) 
{ 
    ReportQuestionsGuiDisplay reportQuestionsGuiDisplay = 
     new ReportQuestionsGuiDisplay(); 

    reportQuestionsGuiDisplay.ParentQuestionTitle = 
     questionsBll.GetQuestionParents() 
        .FirstOrDefault(
         x => x.QuestionParentId == reportQuestion.ParentId) 
        .QuestionParentTitle; 

    reportQuestionsGuiDisplay.ReportId = reportQuestion.ReportId; 

    reportQuestionsGuiDisplayList.Add(reportQuestionsGuiDisplay); 
} 

На переднем конце (ASPX), я следующее:

<% foreach (ReportQuestionsGuiDisplay report in reportQuestionsGuiDisplayList) 
{%> 
    <div class="hrLightBlue"></div> 
    <div class="RPTContentTitle2"> 
     <%= report.SubjectTitle %> 
    </div> 
    <div class="hrLightBlue"></div> 
<%} %> 

Однако я получаю следующее сообщение об ошибке:

Невозможно лить объект типа 'System.Linq.GroupedEnumerable``3[SCPerformance.Shared.Models.ReportQuestion,System.Nullable``1[System.Int32],SCPerformance.Shared.Models.ReportQuestion]' для ввода 'SCPerformance.Shared.Models.ReportQuestion '.

+0

На какой линии вы получаете, что ошибка? –

+0

в foreach (отчет ReportQuestionQuestion в reportQuestionsList), поскольку reportQuestionsList является IEnumerable >> – Johann

+0

Почему вы группируете в первую очередь? Что вы пытаетесь достичь здесь? –

ответ

1

Вы звоните:

IEnumerable<TResult> GroupBy<TSource, TKey, TResult>(
    this IEnumerable<TSource> source, 
    Func<TSource, TKey> keySelector, 
    Func<TKey, IEnumerable<TSource>, TResult> resultSelector) 

(см http://msdn.microsoft.com/en-us/library/bb549393.aspx).

В вашем случае результат IEnumerable<IGrouping<TKey, TSource>>. (См http://msdn.microsoft.com/en-us/library/bb534501.aspx)

В вашем цикле Еогеасп, сделайте следующее:

foreach (var group in reportQuestionsList) 
{ 
    foreach(ReportQuestion reportQuestion in group) 
    {   
    } 
} 

Но я запутался, что ваш код кажется достичь. Мне кажется, что вы просто добавляете новые объекты ReportQuestionsGuiDisplay в плоский список. Зачем вам в первую очередь нужна вложенная структура? Вы не можете использовать OrderBy().ThenBy()? Кроме того, получение родительского заголовка выполняется чаще, чем нужно.

Я хотел бы предложить следующий подход:

  1. группу questionSubjectGrps родителем ID.
  2. для каждой группы ...
  3. ... получить родительское название
  4. ... добавить новый ReportQuestionsGuiDisplay к заказу reportQuestionsGuiDisplayListreportQuestionsGuiDisplayList
  5. Предметного ID, то родительским ID.

(это, вероятно, включать добавление ParentID и SubjectID свойства ReportQuestionsGuiDisplay или, возможно, ReportQuestion, если это уместно.)

Или в коде:

var questionGroups = 
    questionsBll.GetReportQuestions() 
       .Where(x => x.VersionId == iLatestVersion) 
       .GroupBy(q => q.ParentId); 

var displayList = new List<ReportQuestionsGuiDisplay>(); 

foreach (var questionGroup in questionGroups) 
{ 
    var title = questionsBll.GetQuestionParents() 
        .First(x => x.QuestionParentId == group.Key) 
        .QuestionParentTitle; 

    foreach (var question in questionGroup) 
    { 
     var reportQuestionsGuiDisplay = 
      new ReportQuestionsGuiDisplay() 
      { 
       ParentQuestionTitle = title, 
       ReportID = question.ReportID, 
       SubjectID = question.SubjectID, 
       ParentID = question.ParentID 
      }; 

     displayList.Add(reportQuestionsGuiDisplay); 
    } 
} 

reportQuestionsGuiDisplayList = displayList.OrderBy(q => q.SubjectID) 
              .ThenBy(q => q.ParentID); 
+0

Спасибо Даан, это очень близко к тому, чего я хочу достичь. В принципе, мне нужно, чтобы мой список сначала был сгруппирован по теме Subject, затем ParentId, а затем получил этот список и в цикле переднего конца, чтобы отобразить мои вопросы, сначала сгруппированные по предмету, а затем сгруппированные по Parent. – Johann

Смежные вопросы