Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net LINQ到SQL分组并传递到视图_Asp.net_Linq_Asp.net Mvc 3_Linq Group_Cfoutput - Fatal编程技术网

Asp.net LINQ到SQL分组并传递到视图

Asp.net LINQ到SQL分组并传递到视图,asp.net,linq,asp.net-mvc-3,linq-group,cfoutput,Asp.net,Linq,Asp.net Mvc 3,Linq Group,Cfoutput,我不熟悉Asp.Net、MVC3、Linq以及其他与之相关的东西。我非常习惯PHP和ColdFusion,请原谅我的无知!本质上,我试图在ColdFusion中重新创建一个场景,在这里我可以执行与cfoutput的group属性等效的操作。我习惯于只调用存储过程,然后执行 然后为具有非不同数据的任何列创建另一个内部cfoutput。工作起来很有魅力!在Asp.Net中没有这么多 我想继续使用我的存储过程,这是从两个具有一对多关系的表返回连接。例如,让我们假设我有3列:全名、头衔和毕业年份。毕业

我不熟悉Asp.Net、MVC3、Linq以及其他与之相关的东西。我非常习惯PHP和ColdFusion,请原谅我的无知!本质上,我试图在ColdFusion中重新创建一个场景,在这里我可以执行与cfoutput的group属性等效的操作。我习惯于只调用存储过程,然后执行

然后为具有非不同数据的任何列创建另一个内部cfoutput。工作起来很有魅力!在Asp.Net中没有这么多

我想继续使用我的存储过程,这是从两个具有一对多关系的表返回连接。例如,让我们假设我有3列:全名、头衔和毕业年份。毕业年份是联接表中的列,因此存储过程的结果如下所示:

吉姆教授2005
吉姆教授2008
吉姆教授2011

我将此发送到视图。我假设视图的任务是根据其中一列(可能是全名)对数据进行分组。我想输出一个包含3列的HTML表,在这种情况下,我会有一行:

Jim教授2005、2008、2011

我已经在谷歌上搜索了大量使用组键的例子。这似乎对我没有帮助,因为我不想只输出一个值“Jim”(或任何分组值),我需要为每行输出“Jim”和“Professor”值。我的想法是我需要两个foreach循环,外部循环显示全名和标题,内部循环显示毕业年份所有可能的匹配。我似乎无法在一个小组中获得毕业年份,尤其是使用这种iGroup语法。键只能存储一个值,我需要该行上的每个值,我只需要迭代一两个值。我是否应该在执行第二个linq分组后尝试创建自定义视图模型,然后将其发送到强类型视图

编辑: 好的,我有一些代码可以工作,但它似乎效率很低,因为我基本上必须重新定义存储过程中的所有列/值。它几乎让我想忘记存储过程,而只使用LINQ来处理所有事情。似乎我所要求的是一种“多栏分组”,并且帮了我很大的忙

var records = db.getRecords();
var groups = from r in records
    group r by new
    {
       r.id
    }
    into row
    select new ListVM()
    {
       id = row.Key.id,
       fullname = row.Select(x => x.fullname).First(),
       title = row.Select(x => x.title).First(),
       degrees = row.Select(x => x.degree_name).ToList(),
       majors = row.Select(x => x.major_name).ToList()
    };
return View(groups);

当然,我必须创建一个ViewModel才能工作。在我看来,然后我可以使用for循环来迭代学位和专业列表。这是最好的方法吗?我通常需要的不仅仅是组键来显示我的整行信息,我只想在一个20列的行中迭代列表一次或两次,而不是在我看到的大多数示例中只显示组键一次并迭代所有内容。

我不是Linq和MVC的大专家,但面对你的问题,我会:

  • 在控制器/模型中处理数据准备,在被教导视图应该只显示事物之后
  • 我将使用这些主题中的知识来解决您的特定问题:

    a) 按多列分组:

    b) 作为聚合函数的连接:

    c) 使用聚合和按多列分组


  • 一旦视图模型中有了数据,就可以显示它。

    我相信我终于找到了解决问题的方法。“集体加入”似乎可以轻松解决我的问题。我在这页上找到的信息解决了这个问题: