我有以下数据库架构,我正在为它开发屏幕。
我想在网格中显示信息,例如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。有什么输入吗?
答案 0 :(得分:2)
如果你使用EF,你可以这样做:
_context.TableC.Select(x => x.TableB)
.Select(x => new CustomTable
{
tableDesc = x.TableC.Desc,
tableBDesc = x.Desc
});
此代码将生成SELECT
JOIN
并返回List
个CustomTable
个对象。
它将从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