如何通过循环 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 循环

通过实体框架中的变量引用表

如何使用 C# 代码部分中的 SQL 函数使用 MVC 4 中的实体框架

MVC foreach 循环唯一 ID C#

在 C# 中,如何找到循环依赖链?

使用 `db.Database.SqlQuery<model>` 后如何清除参数