Asp.net LINQ到SQL分组并传递到视图
我不熟悉Asp.Net、MVC3、Linq以及其他与之相关的东西。我非常习惯PHP和ColdFusion,请原谅我的无知!本质上,我试图在ColdFusion中重新创建一个场景,在这里我可以执行与cfoutput的group属性等效的操作。我习惯于只调用存储过程,然后执行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列:全名、头衔和毕业年份。毕业
然后为具有非不同数据的任何列创建另一个内部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的大专家,但面对你的问题,我会:
一旦视图模型中有了数据,就可以显示它。我相信我终于找到了解决问题的方法。“集体加入”似乎可以轻松解决我的问题。我在这页上找到的信息解决了这个问题: