繁体   English   中英

如何提取对象平面列表的通用属性并构建 rest 属性的嵌套列表

[英]How to extract common properties of a flat list of objects and build a nested list of the rest of properties

标题很难解释,所以在这里我将根据我所获得的内容尽我所能描述我需要达到的目标:我收到一个扁平列表,如下所示:

{
    {
        "MediumDescription": "SMS to mobile phone",
        "CommunicationMediumCode": "SMS",
        "CommunicationGroupDescription": "SMS",
        "CommunicationMediumId": 5,
        "CommunicationGroupId": 18
    },
    {
        "MediumDescription": "Web with email notification",
        "CommunicationMediumCode": "WbEml",
        "CommunicationGroupDescription": "SMS",
        "CommunicationMediumId": 6,
        "CommunicationGroupId": 18
    },
    {
        "MediumDescription": "Web with SMS notification",
        "CommunicationMediumCode": "WbSMS",
        "CommunicationGroupDescription": "SMS",
        "CommunicationMediumId": 7,
        "CommunicationGroupId": 18
    }
}

如您所见,有一些常见的属性:GroupId 及其描述和 rest 是该 GroupId 的可用媒介,但它们没有组合在一起。 (为简单起见,我删除了一些其他属性)。 有了这些信息,我需要构建以下内容:

{
        "CommunicationGroupId": 18,
        "CommunicationGroupDescription": "SMS",
        [
            {
                "MediumDescription": "Web with SMS notification",
                "CommunicationMediumCode": "WbSMS",
                "CommunicationMediumId": 7,
            },
            {
                "MediumDescription": "Web with email notification",
                "CommunicationMediumCode": "WbEml",
                "CommunicationMediumId": 6,
            },
            {
                "MediumDescription": "SMS to mobile phone",
                "CommunicationMediumCode": "SMS",
                "CommunicationMediumId": 5,
            }
        ]
}

这是我认为 C# model 应该是这样的:

public class NewCommunicationPreference
    {
        public int CommunicationGroupId { get; set; }
        public string CommunicationGroupDescription { get; set; }
        public List<MediumModel> Mediums { get; set; }

    }
public class MediumModel
    {
        public string MediumDescription { get; set; }
        public string CommunicationMediumCode { get; set; }
        public int? CommunicationMediumId { get; set; }
    }

已尝试

通过以下内容,我可以构建类型为 object 但在这种新类型中有一个列表,但我只是不知道如何提取常见 GroupId 的属性。 我怎样才能实现我的目标?

var groupedComms = result
            .Select(g => new
            {
                g.CommunicationGroupId,
                g.CommunicationGroupDescription,
           
            }).Distinct().ToList();

谢谢

假设您的resultIEnumerable<FlatListModel>

public class FlatListModel
{
    public int CommunicationGroupId { get; set; }
    public string CommunicationGroupDescription { get; set; }
    public string MediumDescription { get; set; }
    public string CommunicationMediumCode { get; set; }
    public int? CommunicationMediumId { get; set; }
}

, 然后

var groupedComms = result
    .GroupBy(
        flat => new { flat.CommunicationGroupId, flat.CommunicationGroupDescription },
        (key, list) => new NewCommunicationPreference {
            CommunicationGroupId = key.CommunicationGroupId,
            CommunicationGroupDescription = key.CommunicationGroupDescription,
            Mediums = list.Select(m => new MediumModel {
                CommunicationMediumId = m.CommunicationMediumId,
                CommunicationMediumCode = m.CommunicationMediumCode,
                MediumDescription = m.MediumDescription }
                ).ToList()
        }
    )
    .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM