如何在 C# 中映射 属性 列表?
How to map a property in C# that is a list?
这些是我的 类:
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?>' 隐式转换为 'bool?'
我觉得我需要在 Select 语句的末尾添加一些内容,但我不确定是什么。我执行了 FirstOrDefault() 并使错误消失,但我只得到一个值,这不是我想要的。
您的方法存在的问题是您只在列表构造函数中创建了 RegistrationProcess
的一个实例。因此,通过调用 source.RegistrationProcess.Select(o => o.HasPaid)
并将其分配给新创建的 RegistrationProcess
,您正在创建服务注册过程的所有 bool 值的集合,并尝试将其分配给单个注册过程。
解决方案是创建多个 RegistrationProcess
实例。事实上,source.RegistrationProcess
中的每个元素一个。为此,您可以直接在 source.RegistrationProcess
上使用 Select 方法:
source.RegistrationProcesses.Select(x => new RegistrationProcess() { PaidInFull = x.HasPaid }).ToList()
如您所见,source.RegistrationProcesses
中的每个元素都会创建一个新的 RegistrationProcess
。或者换句话说:你 select source.RegistrationProcesses
的元素作为 new RegistrationProcess() { PaidInFull = x.HasPaid }
如果这对你更有意义。
.ToList()
将 IEnumerable 转换为列表。
这些是我的 类:
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?>' 隐式转换为 'bool?' 我觉得我需要在 Select 语句的末尾添加一些内容,但我不确定是什么。我执行了 FirstOrDefault() 并使错误消失,但我只得到一个值,这不是我想要的。
您的方法存在的问题是您只在列表构造函数中创建了 RegistrationProcess
的一个实例。因此,通过调用 source.RegistrationProcess.Select(o => o.HasPaid)
并将其分配给新创建的 RegistrationProcess
,您正在创建服务注册过程的所有 bool 值的集合,并尝试将其分配给单个注册过程。
解决方案是创建多个 RegistrationProcess
实例。事实上,source.RegistrationProcess
中的每个元素一个。为此,您可以直接在 source.RegistrationProcess
上使用 Select 方法:
source.RegistrationProcesses.Select(x => new RegistrationProcess() { PaidInFull = x.HasPaid }).ToList()
如您所见,source.RegistrationProcesses
中的每个元素都会创建一个新的 RegistrationProcess
。或者换句话说:你 select source.RegistrationProcesses
的元素作为 new RegistrationProcess() { PaidInFull = x.HasPaid }
如果这对你更有意义。
.ToList()
将 IEnumerable 转换为列表。