c# - 在不复制结果条目的情况下查询或合并一对多关系

标签 c# sql-server asp.net-mvc entity-framework one-to-many

我有 2 个非常大的数据集。第一个“主表”是一个独特的列表。第二个“Reference Table”与“Main Table”是一对多的关系。

目标: 使用跨两个数据集的过滤器进行查询,但显示结果而不复制“主表”的条目。我不希望用户滚动浏览同一行项目的 200 行只是因为一对多“引用表”的字段非常独特。

有什么技术可以解决这个问题吗?

我能想到的就是将“引用表”的行作为列顺序附加到“主表”,例如; a_1, b_1, a_2, b_2,...

这是数据集的示例: data

我正在使用 C#、ASP.NET、SQL Server 2016、 Entity Framework

最佳答案

将查询分成两部分可以获得很多功能:

using (MainContext ctx = new MainContext()) {
  var rows =  from main in ctx.Main
              select new 
              {
                Main = main,
                References = from r in ctx.References
                             where r.Id == main.Id
                             select r
              }

  // Do something with your rows
}

这将向数据库发送一个查询,并在 Main 中的每一行返回一个实体,其中包含一个单独的属性,该属性将包含该 Main 行的所有元数据。

如果您使用例如 WebAPI 调用将此发送回客户端,则客户端上的数据将如下所示:

[{
  main: { id: ..., x: ..., y: ..., z: ...},
  references: [{ a: ..., b: ... }, {a: ..., b: ... }, ... ]
},
...,
]

关于c# - 在不复制结果条目的情况下查询或合并一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51957017/

相关文章:

c# - 我可以使用 Reactive Extensions 进行独立订阅/发布吗?

sql-server - 同步数据集

sql - 使用/动态 SQL 捕获输出从存储过程执行存储过程

sql-server - Redis 或 SQL Server 存储短信确认数据

asp.net-mvc - 创建数字为 1 到 30 的下拉列表 mvc

c# - String.Compare() 2 个字符串

c# - 从其他进程读取和写入

c# - 调试:附加到在 cmd.exe 中运行的控制台应用程序的进程

asp.net - Windows Azure PaaS(Web 角色)的真正替代品?

asp.net-mvc - 如何在 asp.net mvc、web.config 文件中为特定位置设置 maxRequestLength 和 maxAllowedContentLength?