2014-12-04 94 views
0

我有一个嵌套的对象,像这样的结构:模型A包含模型B的列表。我想知道是否有一个快速的方法来扁平化它。拼合复杂模型

例子:

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

这给我的只有一个扁平化列表中的订单编号

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

这给我其中包含订单编号的列表中为每个客户记录

的客户信息列表
var list = customerList.Select(x => new { x.ID, x.Name, x.OrderNumber}).ToList(); 

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

ID --- ----名称ORDERNUMBER

123 JOHNDOE 1,2,3

564 JaneDoe 1,2-

感觉好像使用LINQ SelectMany可以完成这项工作,但不知道该怎么做。如上所示,我得到了我想要的结果,我只需要一种方法将它放在一个语句中。我知道我可以做一个循环,并构建一个新的列表来获得我想要的。这不是世界末日,但我想了解更多关于LINQ的知识。任何提示将不胜感激。谢谢。

回答

0

我总是发现这样的查询语法容易的事情,试试这个:

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

UPDATE

而且您的意见,如果你只是想要的顺序号是一个逗号分隔字符串最后一列你可以做到以下几点:

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

这是行不通的。感谢您查看这个。我只是意识到在我的文章中犯了一个错误。让我更新它。 – NKD 2014-12-04 17:14:12

+0

@NKD如果你能解释它不工作的方式,我可能会纠正它。 – 2014-12-04 17:16:05

+0

@NKD我修改了查询以匹配您更新的客户类。 – 2014-12-04 17:17:30