2010-06-11 83 views
1

我有下面的代码,我试图通过我的qestAires匿名类型的孩子问题。当我到达foreach循环时,出现以下错误:不能使用匿名类型的foreach

foreach statement cannot operate on variables of type 'Question' because 'Question' does not contain a public definition for 'GetEnumerator'

为了解决这个问题,我需要采取什么不同的措施?

 var questAires = (from qs in dc.Questionnaires 
         from q in dc.Questions.Where(t => t.QuestionnaireId == qs.QuestionnaireID) 
         from r in dc.Responses.Where(qr => qr.QuestionID == q.QuestionId).DefaultIfEmpty() 
         where qs.QuestionnaireID == QuestionnaireId 
         select new 
         { 
          qs.Description, 
          Questions = q, 
          Responses = r 
         }).Single(); 

     foreach(var question in questAires.Questions) 
     { 

     } 
+0

不'questAires'解析到什么类型的?您可以在调试器中使用Intellisense/tooltip进行检查,只需在LINQ语句后面断开即可。 – ChrisF 2010-06-11 20:46:14

+1

听起来像questAires.Questions没有实现IEnumerable。 – 2010-06-11 20:48:03

回答

5

questAires.Questions只会解析为单个问题,并且您将为每个问题获得一个questAires对象(这将导致.Single()抛出)。

我想你想是这样的:

var questAires = (from qs in dc.Questionnaires 
        select new { 
         qs.Description, 
         Questions = from q in dc.Questions where q.QuestionnaireId == qs.QuestionnaireID 
            select new { 
             Question = q, 
             Response = (from r in dc.Responses where r.QuestionID == q.QuestionId select r).DefaultIfEmpty() 
            } 
       }).Single() 
+0

完美,你是男人。 – 2010-06-11 20:58:24

0

q实际解决,从枚举dc.Questions.Where(...)一个单一的项目,所以是的,你只会得到一个单一的项目 - 不是枚举 - 的问题。