【问题标题】:Linq query that results in one field in parent entity being a collection of child entitiesLinq 查询导致父实体中的一个字段是子实体的集合
【发布时间】:2012-02-02 14:20:10
【问题描述】:

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

【问题讨论】:

    标签: linq


    【解决方案1】:

    希望这能解决问题;

    编辑:更新代码以执行左外连接,基于此示例; http://smehrozalam.wordpress.com/2009/06/10/c-left-outer-joins-with-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) };
    

    注意,在选择 Orders 分组时使用Where 是为了在此时过滤掉空订单,而不是最终为没有订单的客户提供包含单个空订单的分组.

    然后是一些示例用法;

    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);
        }
    }
    

    此示例生成一个具有两个字段的对象,即客户和一组相关的订单,但没有理由不能按照您在帖子中指定的那样在查询中选择客户对象的各个字段。

    【讨论】:

    • 是否可以修改此查询以允许没有任何订单的客户使用?这些客户不包括在结果中。
    • @user54064:我现在更新了答案,以按照您指定的方式行事。很抱歉响应缓慢,但我不知道该怎么做,直到我偶然发现了链接的示例。
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    相关资源
    最近更新 更多