2012-09-27 115 views
2

我有下面的類的IEnumerable類:如何扁平化包含相關類

public class OrgAlertList 
{ 
    public string CustMailName { get; set; } 

    /// <summary> 
    /// Gets all the alerts that apply to this customer. 
    /// </summary> 
    public virtual IEnumerable<OrgAlertSummary> Alerts { get; set; } 
} 

包含一個屬性(名爲警報)這是我的第二類的IEnumerable:

public class OrgAlertSummary 
{ 
    /// <summary> 
    /// Message detailing the alert for the user. 
    /// </summary> 
    public string Message { get; set; } 

    /// <summary> 
    /// Message detailing how to fix alert. 
    /// </summary> 
    public string ActionMessage { get; set; } 
} 

OrgAlertList中的Alerts屬性可以包含零到多個OrgAlertSummary項目。

我需要編寫一個Lambda表達式或使用LINQ查詢來將這些類扁平化爲一個新類型,該類型中包含CustMailName,Message和ActionMessage的每個OrgAlertList項目,其中Alerts屬性至少包含一個OrgAlertSummary項目。有人能幫忙嗎?

回答

4

試試這個:(未經測試)

var q = from orgAlert in myOrgAlertList 
     from orgAlertSummary in orgAlert.Alerts 
     select new { orgAlert.CustomMailName, 
        orgAlertSummary.Message, 
        orgAlertSummary.ActionMessage}; 

假設myOrgAlertList是某種IEnumerable<OrgAlertList>

這個查詢將創建一個匿名類型名爲CustomMailName,消息和ActionMessage的領域。如果您打算將這個結果列表導出到其他模塊,建議您定義自己的類並在select中創建它,而不是使用匿名類型。

+1

另請注意 - 嵌套'from's作爲'SelectMany'方法執行 - 這裏是[整潔的文章](http://www.codethinked.com/a-visual-look-at-the-linq -selectmany-operator)關於該主題 –