2014-12-04 68 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