如何通过循环 db [C# MVC & LINQ] 中的 3 个表来映射数据以对应表头
Posted
技术标签:
【中文标题】如何通过循环 db [C# MVC & LINQ] 中的 3 个表来映射数据以对应表头【英文标题】:How to map data to correspond to table headers by looping through 3 tables from db [C# MVC & LINQ] 【发布时间】:2020-09-05 19:45:50 【问题描述】:我有 3 个表,即:ImmunizationCategories、ImmunizationMaster 和 ImmunizationAdmins。见下文
和 最后
ImmunizationCategories 数据进入 BCG VACCINE:出生时。可以看出,所有表都与 FK_Constraint 链接。我正在从 ImmunizationAdmins 创建我的报告,如下所示:
我的挑战是根据列标题映射数据,例如在 BCG VACCINE 列上,在其下方(空单元格),可以填写属于 BCG 的免疫名称。使用 LINQ,我已经做到了;
@foreach (var med in Model.immunizationAdmins.Where(e=>e.ImmunizationMasterId==e.ImmunizationMaster.Id && e.ImmunizationMaster.ImmunizationCategoryId == e.ImmunizationMaster.ImmunizationCategory.Id))
还有这个
@foreach (var med in Model.immunizationAdmins.Where(e=>e.ImmunizationMasterId==e.ImmunizationMaster.Id && e.ImmunizationMaster.ImmunizationCategoryId == e.ImmunizationMaster.ImmunizationCategory.Id))
<td>@med.ImmunizationMaster.ImmunizationName)</td>
查询返回并填充单元格,但不是根据列标题。这就是它的样子
如何映射它们?
【问题讨论】:
首先添加所有列创建输出表。然后对每一行中的数据进行分组。最后将组数据添加到表中。您正在创建一个数据透视表。在以下帖子中查看我的答案:***.com/questions/45741333/… @jdweng,很遗憾找不到您分享的链接页面。 【参考方案1】:对不起。帖子已关闭。我有足够的积分来阅读链接。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication73
class Program
static void Main(string[] args)
DataTable dt = new DataTable();
dt.Columns.Add("R.N", typeof(int));
dt.Columns.Add("Student Name", typeof(string));
dt.Columns.Add("Subjects", typeof(string));
dt.Columns.Add("Marks", typeof(int));
dt.Rows.Add(new object[] 1, "Indra Poudel", "DBMS", 75 );
dt.Rows.Add(new object[] 1, "Indra Poudel", "SAD", 75 );
dt.Rows.Add(new object[] 1, "Indra Poudel", "TOC", 75 );
dt.Rows.Add(new object[] 2, "John show", "DBMS", 75 );
dt.Rows.Add(new object[] 2, "John show", "SAD", 75 );
dt.Rows.Add(new object[] 2, "John show", "TOC", 75 );
string[] subjects = dt.AsEnumerable().Select(x => x.Field<string>("Subjects")).Distinct().ToArray();
DataTable pivot = new DataTable();
pivot.Columns.Add("R.N", typeof(int));
pivot.Columns.Add("Student Name", typeof(string));
foreach (string subject in subjects)
pivot.Columns.Add(subject, typeof(int));
var groups = dt.AsEnumerable().GroupBy(x => x.Field<int>("R.N"));
foreach (var group in groups)
DataRow newRow = pivot.Rows.Add();
newRow["R.N"] = group.FirstOrDefault().Field<int>("R.N");
newRow["Student Name"] = group.FirstOrDefault().Field<string>("Student Name");
foreach (var col in group)
newRow[col.Field<string>("Subjects")] = col.Field<int>("Marks");
【讨论】:
以上是关于如何通过循环 db [C# MVC & LINQ] 中的 3 个表来映射数据以对应表头的主要内容,如果未能解决你的问题,请参考以下文章
带有模型和视图包的视图中的 C# MVC foreach 循环