按类别名称对视图中的数据进行分组的外键相关数据分组

时间:2015-06-11 19:35:50

标签: asp.net asp.net-mvc linq entity-framework

我试图在我的控制器中组织分组数据,以便在我的视图中使用。

我有以下解决方案,但我收到以下错误:

"已经有一个与此命令关联的开放DataReader必须先关闭。"

给出2组相关数据:一组问题及其所属的类别,由以下类别表示

Category
Question

我想按类别对问题进行分组,用外键连接

categoryId

以下是一些示例数据:

分类

category1 { Id = 1, Name = "Info about you" }
category2 { Id = 2, Name = "Info about your pet" }

问题

question1 { categoryId = 1, Text = "What's your name?" }
question2 { categoryId = 1, Text = "What's your age?" }
question3 { categoryId = 2, Text = "What kind of pet do you have?"
question4 { categoryId = 2, Text = "What color is your pet?"

所需的HTML输出类似于

有关您的信息

  • 你的名字是什么?
  • 你的年龄是多少?

有关您宠物的信息

  • 你有什么样的宠物?
  • 你的宠物是什么颜色的?

所以我的想法是将类别名称和相关问题的信息放入ViewModel中,如下所示:

public class CategoriesWithQuestions() {
    public string Name { get; set; }
    public IEnumerable<Question> Questions { get; set; }
}

然后在我的控制器中,我会使用查询将数据放入ViewModel:

public ActionResult MyAction() {

    var categoriesWithQuestions =
        db.Categories()
            .Select(category => new CategoriesWithQuestions()
            {
                Name = category.Name,
                Questions = db.Questions().Where(Queryable => q.CategoryId == category.Id)
            });

    return View(categoriesWithQuestions);
}

在视图中使用ViewModel,通过循环访问ViewModel并访问类别的name属性和相关问题,这两个访问器都在ViewModel类中:

@model IEnumerable<App.ViewModels.CategoriesWithQuestions>

...

@foreach (var category in Model)
{
    <h3>@category.Name</h3>
    <ul>
    @foreach (App.Models.Question Question question in category.Questions)
    {
        <li>@question.Text</li>
    }
    </ul>
}

名称很好,但尝试访问视图中的问题时会发生错误。

了解我目前的解决方案或替代(更好)解决方案的想法。

1 个答案:

答案 0 :(得分:1)

试试这个

try {
    $output = shell_exec($input);
} catch (Exception $e) {
    echo '60 seconds passed and response is: ',  $e->getMessage(), "\n";
}