【问题标题】:How to map a property in C# that is a list?如何在 C# 中映射作为列表的属性?
【发布时间】:2021-09-27 11:37:14
【问题描述】:

这些是我的课程:

    public class Registration
    {
        public bool? IsRegistered { get; set; }
        public List<RegistrationProcess> RegistrationProcess { get; set; }
    }

    public class RegistrationProcess
    {
        public bool? PaidInFull { get; set; }
        public double PaymentAmount { get; set; }
        public bool IdentityVerified { get; set; }
    }

我有一个方法可以像这样进行对象映射:

public Registration Translate(Services.Registration source)
        {
            return new Registration
            {
                IsRegistered = source.IsRegistered,
                RegistrationProcess = new List<RegistrationProcess>
                {
                    new RegistrationProcess()
                    {
                        PaidInFull = source.RegistrationProcess.Select(o => o.HasPaid),
                        
                    }
                }
            };
        }

我不确定如何设置 RegistrationProcess 的映射。 我想将 RegistrationProcess 中的 PaidInFull 映射到属性 HasPaid。它们都是布尔值。 我收到一个错误:无法将类型 'System.Collections.Generic.IEnumerable' 隐式转换为 'bool?' 我觉得我需要在 Select 语句的末尾添加一些内容,但我不确定是什么。我做了 FirstOrDefault() 并且这使错误消失了,但我只得到了一个值,这不是我想要的。

【问题讨论】:

    标签: c# list api generics mapping


    【解决方案1】:

    您的方法的问题是您只在列表构造函数中创建了一个RegistrationProcess 实例。因此,通过调用 source.RegistrationProcess.Select(o =&gt; o.HasPaid) 并将其分配给您新创建的 RegistrationProcess,您正在创建服务注册过程的所有 bool 值的集合,并尝试将其分配给单个注册过程。

    解决方案是创建多个RegistrationProcess 实例。事实上,source.RegistrationProcess 中的每个元素对应一个。为此,您可以直接在 source.RegistrationProcess 上使用 Select 方法:

    source.RegistrationProcesses.Select(x => new RegistrationProcess() { PaidInFull = x.HasPaid }).ToList()
    

    如您所见,source.RegistrationProcesses 中的每个元素都会创建一个新的RegistrationProcess。或者换句话说:你选择source.RegistrationProcesses 的元素为new RegistrationProcess() { PaidInFull = x.HasPaid },如果这对你更有意义的话。 .ToList() 将 IEnumerable 转换为列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2021-12-15
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多