展平复杂的模型

时间:2014-12-04 16:54:14

标签: c# model linq-to-objects complextype

我有一个嵌套对象,其结构如下:模型A包含模型B的列表。我想知道是否有一种快速的方法来展平它。

示例:

public class Customer
{
public int ID {get; set;}
public string Name {get; set;}
public List<int> OrderNumber { get; set; }
}

这给了我一个只有OrderNumber

的扁平列表
var list = customerList.Select(x => new { x.ID, x.Name, x.OrderNumber}).Where(x => x.OrderNumber!= null).SelectMany(s => s.OrderNumber).ToList();

这给我一个客户信息列表,其中包含每个客户记录的OrderNumber列表

var list = customerList.Select(x => new { x.ID, x.Name, x.OrderNumber}).ToList();

我正在寻找一种快速的方法来返回一个扁平的客户信息列表,并将ordernumber的扁平列表作为字符串。像这样......

ID --- Name ---- OrderNumber

123 JohnDoe 1,2,3

564 JaneDoe 1,2

我觉得使用LINQ SelectMany可以完成这项工作但不确定如何正确完成。如上所示,我得到了我想要的结果,我只需要一种方法将它放在一个声明中。我知道我可以做一个循环并构建一个新列表来获得我想要的东西。它不是世界末日,但我想更多地了解LINQ。任何提示将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

我总是在查询语法中发现这种事情更容易,试试这个:

var query = from cust in customerList
            from orderNo in cust.OrderNumber
            select new { cust.ID, cust.Name, OrderNumber = orderNo };

更新

除了您的评论之外,如果您只想将订单号作为最后一列的逗号分隔字符串,则可以执行以下操作:

var query = customerList.Select(x => new{ x.ID, x.Name, OrderNos = string.Join(",", x.OrderNumber)});