Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导致父实体中的一个字段是子实体集合的Linq查询_Linq - Fatal编程技术网

导致父实体中的一个字段是子实体集合的Linq查询

导致父实体中的一个字段是子实体集合的Linq查询,linq,Linq,我正在尝试编写一个Linq查询,该查询将生成一个父实体,其中一个字段是其相关子实体的集合。例如,我有一个所有客户实体的集合和一个所有订单实体的集合。订单实体有一个名为customerPK的字段,其中包含到相关父客户实体的链接。我想创建一个Linq查询,将两个集合连接起来,并在客户实体的所有字段中加上一个附加字段,该字段是该特定客户实体的所有相关订单实体的集合对象。希望这能起到作用 编辑:根据本例更新代码以执行左外部联接。这现在包括没有订单的客户 var query = from c in cus

我正在尝试编写一个Linq查询,该查询将生成一个父实体,其中一个字段是其相关子实体的集合。例如,我有一个所有客户实体的集合和一个所有订单实体的集合。订单实体有一个名为customerPK的字段,其中包含到相关父客户实体的链接。我想创建一个Linq查询,将两个集合连接起来,并在客户实体的所有字段中加上一个附加字段,该字段是该特定客户实体的所有相关订单实体的集合对象。

希望这能起到作用

编辑:根据本例更新代码以执行左外部联接。这现在包括没有订单的客户

var query = from c in customers
            join o in orders on c.ID equals o.CustomerPK into joined
            from j in joined.DefaultIfEmpty()
            group j by c into g
            select new { Customer = g.Key, Orders = g.Where(x => x != null) };
请注意,在选择订单分组时使用
,其中
,是为了在此时过滤掉空订单,而不是最终为没有订单的客户提供包含单个空订单的分组

然后举例说明用法

foreach (var result in query)
{
    Console.WriteLine("{0} (ID={1})", result.Customer.Name, result.Customer.ID);
    foreach (var order in result.Orders)
    {
        Console.WriteLine(order.Description);
    }
}

此示例生成一个包含两个字段的对象,即Customer,然后是一组相关订单,但您没有理由不能在查询中选择您在帖子中指定的Customer对象的各个字段。

是否仍有修改此查询的方法,以允许没有任何订单的客户?这些客户不包括在结果中。@user54064:我现在已更新了答案,以便按照您指定的方式进行操作。很抱歉反应太慢,但我不知道如何做,直到我偶然发现了链接的示例。