不能在匿名类型上使用foreach

时间:2010-06-11 20:44:09

标签: asp.net linq linq-to-sql

我有以下代码,我正在尝试查看qestAires匿名类型的子问题。当我到达foreach循环时,我得到错误:

  

foreach声明无法操作   '问题'类型的变量因为   '问题'不包含公众   '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)
        {

        }

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

q实际上解析为可枚举的dc.Questions.Where(...)中的单个项目,所以是的,你只会得到一个项目 - 而不是可枚举的 - 用于问题。