使用 LINQ 将节点列表及其属性列表组合在一起

本文关键字:列表 属性 组合 在一起 节点 使用 LINQ | 更新日期: 2023-09-27 18:34:25

>我有一个包含节点列表的表(具有属性 ID 和名称),以及另一个包含节点属性列表的表(具有对相应节点 ID 的引用父级)。我通常查询节点,然后获取其属性,以填充对象

public class NodeWithAttributes
 {
     public Node Node = new Node();
     public List<NodeAttribute> NodeAttributes = new List<NodeAttribute>();
 }

但是,当我想查询"具有属性的节点"列表时,事情变得复杂。我正在尝试按 Parent 将属性分组在一起,然后将它们分配给对象 - 如下所示:

var results = (from n in dbNodes.Nodes
                join na in dbNodes.NodeAttributes on n.ID equals na.Parent
                group na by na.Parent
                into g
                select new NodeWithAttributes
                {
                    Node = n,
                    NodeAttributes = g
                }                                                              
                ).ToList();

但我似乎只能返回组,而不是基于它的对象。我该怎么做才能返回 NodeWithAttributes 列表?

使用 LINQ 将节点列表及其属性列表组合在一起

我认为在您的情况下无需按数据分组。 如果需要父子项,请尝试使用类似于以下内容的查询。

   var query = from c in north.Customers   
               orderby c.CustomerID
               select new
               {
                  customer = c,
                  orders = c.Orders
               };

        foreach (var item in query)
        {
            Console.WriteLine(item.customer.CompanyName);
            foreach (var ord in item.orders)
            {
                Console.WriteLine(ord.OrderDate + " " + ord.OrderID);
            }
            Console.WriteLine("");
        }