如何展平包含相关类的IEnumerable的类

时间:2012-09-27 18:53:24

标签: c# linq lambda

我有以下课程:

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; }
}

它包含一个属性(名为Alerts),它是我的第二个类的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查询,将类展平为一个新类型,其中包含每个OrgAlertList项的CustMailName,Message和ActionMessage,其中Alerts属性包含至少一个OrgAlertSummary项。有人能帮忙吗?

1 个答案:

答案 0 :(得分:4)

试试这个:(未经测试)

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

假设myOrgAlertList是某种IEnumerable<OrgAlertList>

此查询将创建一个匿名类型,其中包含名为CustomMailName,Message和ActionMessage的字段。如果您打算将此结果列表导出到其他模块,建议您定义自己的类并在select中创建它而不是使用匿名类型。