查询嵌套数据的有效方法

2023-12-20

我需要从表中选择许多“主”行,同时还为每个结果返回另一个表中的许多详细行。在没有多个查询的情况下实现这一目标的好方法是什么(一个用于主行,一个用于每个结果以获取详细行)。

例如,数据库结构如下:

MasterTable:
    - MasterId BIGINT
    - Name NVARCHAR(100)

DetailTable:
    - DetailId BIGINT
    - MasterId BIGINT
    - Amount MONEY

我如何最有效地填充data下面的对象?

IList<MasterDetail> data;

public class Master
{
    private readonly List<Detail> _details = new List<Detail>();

    public long MasterId
    {
        get; set;
    }

    public string Name
    {
        get; set;
    }

    public IList<Detail> Details
    {
        get
        {
            return _details;
        }
    }
}

public class Detail
{
    public long DetailId
    {
        get; set;
    }

    public decimal Amount
    {
        get; set;
    }
}

通常情况下,我会采用两个网格方法 - 但是,您可能还想看看 FOR XML - 将父/子数据塑造为 xml 并从中加载它相当容易(在 SQL Server 2005 及更高版本中)那里。

SELECT parent.*,
       (SELECT * FROM child
       WHERE child.parentid = parent.id FOR XML PATH('child'), TYPE)
FROM parent
FOR XML PATH('parent')

另外 - LINQ-to-SQL 支持这种类型的模型,但您需要提前告诉它您想要哪些数据。通过DataLoadOptions.LoadWith http://msdn.microsoft.com/en-us/library/system.data.linq.dataloadoptions.loadwith.aspx:

// sample from MSDN
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith<Customer>(c => c.Orders);
db.LoadOptions = dlo;

var londonCustomers =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

foreach (var custObj in londonCustomers)
{
    Console.WriteLine(custObj.CustomerID);
}

如果你不使用LoadWith,您将获得 n+1 个查询 - 一个主列表,每个主行一个子列表。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查询嵌套数据的有效方法 的相关文章

随机推荐

  • 处理形状可绘制差异的最佳方法 Android 2.3.5 与 4.0

    我正在尝试使用以下形状绘制一个形状 当使用以下命令时 这在 1 6 到 2 3 5 中可以正常工作
  • 从另一个分支更新 github 分支

    我从另一个分支创建了一个分支 然后我回到之前的分支并继续工作 现在我已经转到第二分行了 但是第二个分支没有第一个分支的新变化 我只想更新第一个分支的第二个分支而不删除其中任何一个 但是第二个分支没有第一个分支的新变化 单独切换到第二个分支不
  • C struct 的 Python 等效项(将应用程序从 C 移植到 python)

    我正在移植一个简单 的蓝牙应用程序 它将 L2Cap 协议上的 神奇 数据包发送到蓝牙设备 我在将 C 中的结构对象转换为等效的 python 时遇到问题 In c command types define CFGBT TYPE SETRE
  • 如何重写泛型方法

    通用方法 public
  • 使用 glob() 显示目录中的图像,同时回显唯一的第一张图像

    我对 PHP 很陌生 我不想在这里问任何事情 直到我完全找不到方法来做到这一点 我有一种情况 我想使用 PHP 读取并显示目录中的图像 但我希望读取的第一个图像能够唯一地回显 我当前的代码如下 imageDir img landMarks
  • 如何使用 RGB 图像作为 C# EvalDll 包装器的输入?

    我使用提供的 ImageReader 训练了一个网络 现在我尝试在 C 项目中使用 CNTK EvalDll 来评估 RGB 图像 我看过与 EvalDll 相关的示例 但输入始终是浮点 双精度数组 而不是图像 如何使用公开的接口将经过训练
  • 从函数返回数组/指针

    我正在尝试创建一个从字符串派生的新整数数组 例如 char x 12334 23845 32084 int y 12334 23845 32084 我无法理解如何从函数返回数组 我理解这是不可能的 我最初尝试过 Convert string
  • 无法通过 HTTPS 在 Linux 上克隆 github 存储库

    我正在尝试做一个简单的git clone https github com org project git在 CentOS 机器上但得到 错误 访问时请求的 URL 返回错误 401https github com org project
  • R 中“存在的一切都是对象”的真正含义是什么?

    I saw 要理解 R 中的计算 有两个口号很有帮助 存在的一切都是对象 发生的一切都是函数调用 约翰 钱伯斯 但我刚刚发现 a lt 2 is object a FALSE 实际上 如果一个变量是纯基类型 它的结果 is object 将
  • 运行“Composer Install”后缺少“vendor”文件夹

    我目前正在尝试在 Vagrant Homestead 上运行一个从 Github 拉取的 Laravel 应用程序 我将其连接到数据库 并在文件夹内运行 Composer Install Composer Update 当我尝试在浏览器上访
  • 从二项式分布生成相关随机数

    我试图找到一种方法从几个二项式分布生成相关随机数 我知道如何用正态分布来做到这一点 使用MASS mvrnorm 但我没有找到适用于二项式响应的函数 您可以使用以下命令生成相关制服copula包 然后使用qbinom函数将它们转换为二项式变
  • Python,选择日志文件的目录

    我正在使用 Python 日志记录库 并且想要选择将写入日志文件的文件夹 目前 我举了一个例子TimedRotatingFileHandler与入口参数filename myLogFile log 这边走myLogFile log与我的 p
  • 处理 J2ME 中的可选 API

    是什么right在 Java Mobile 中使用可选 API 的方式 是否需要制作不同版本的应用程序 或者使用以下命令在运行时检查 API 可用性是否足够System getProperty 假设我希望我的应用程序支持 JSR 256 传
  • Minikube服务访问本地VPN

    如何让我的 pod 或 minikube 能够查看我的笔记本电脑通过 VPN 连接到的 10 x 网络 设置 迷你库贝 PHP 容器 php 代码访问私有存储库 10 x 地址 东西可以在本地找到 但我无法在 Pod 中访问同一个 10 x
  • c# 在 FTP 服务器内上传 byte[]

    我需要在 FTP 服务器内上传一些数据 按照 stackoverflow 的帖子 了解如何在其中上传文件和 FTP 一切正常 现在我正在努力改进我的上传 我想收集数据并上传它们而不创建本地文件 而不是收集数据 将它们写入文件 然后在 FTP
  • Scala 宏:检查某个注释

    感谢以下问题的解答我之前的问题 https stackoverflow com q 17223213 397695 我能够创建一个函数宏 使其返回一个Map将每个字段名称映射到其类的值 例如 trait Model case class U
  • C++ 中不可预测的无限 for 循环[重复]

    这个问题在这里已经有答案了 我正在编写一个程序来返回该字符的第一次出现以及该字符在字符串中的频率 函数中的 for 循环执行无限次 而 if 条件和块甚至没有执行一次 问题是什么 string size type find ch strin
  • 如何将字符串写入 Scala Process?

    我启动并运行了一个 Scala 进程 val dir path to working dir val stockfish Process Seq wine dir stockfish 8 x32 exe val logger Process
  • isOrientationSupported 在 IOS 中已弃用

    我收到此错误 但我不知道如何修复它 WARNING
  • 查询嵌套数据的有效方法

    我需要从表中选择许多 主 行 同时还为每个结果返回另一个表中的许多详细行 在没有多个查询的情况下实现这一目标的好方法是什么 一个用于主行 一个用于每个结果以获取详细行 例如 数据库结构如下 MasterTable MasterId BIGI