避免循环为网格显示带来表格相关信息

时间:2016-01-13 11:34:16

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

我有以下数据库架构,我正在为它开发屏幕。

enter image description here

我想在网格中显示信息,例如Desc应该在多行中重复,并且对于每一行,必须有来自 tableC,tableB和tableA 相关信息。

现在我使用linq“包含”相关实体获取控制器层中的每个表,并使用许多foreach循环我创建了customTable类,然后将其绑定到kendo网格。 / p>

foreach(var a in table C)
{
 foreach(var b in tableB)
 {
   CustomTable c = new CustomTable {
   tableDesc = b.Desc,
   tableBDesc = a.Desc
 }
  }
}

class CustomTable
{
  public string tableDDesc{get;set;}
  public string tableBDesc {get;set;}
}

我在想这个/ Linq语法有更好的方法来在数据访问层中构建customClass。有什么输入吗?

2 个答案:

答案 0 :(得分:2)

如果你使用EF,你可以这样做:

_context.TableC.Select(x => x.TableB)
   .Select(x => new CustomTable
      {
         tableDesc = x.TableC.Desc,
         tableBDesc = x.Desc
      });

此代码将生成SELECT JOIN并返回ListCustomTable个对象。

它将从TableB只获得已填充tableC_id字段(NOT NULL)的行。

答案 1 :(得分:2)

如何使用链接项目将结果作为CustomTable类返回。像这样的东西

 var results = (from tableC in context.TableCs
                              from tableB in context.TableBs
                              where tableB.Id == tableC.Id
                              select new { tableDDesc = tableB.Description, tableBDesc = tableC.Description }
                              ).ToList();

               results.ForEach(obj => new CustomTable{tableDDesc = obj.tableDDesc, tableBDesc = obj.tableBDesc});

如果不需要,您可以删除tableB.Id == tableC.Id