我有以下情况:
由于一个不幸的遗留数据库,我有一些映射到NHibernate的类,我想要展平成DTO。它看起来像这样:
这是我最终想要的:
public class ProteinSampleDto
{
public virtual SampleType SampleType { get; set; }
public virtual Project Project { get; set; }
public virtual long Variant { get; set; }
public virtual DateTime CreationDate { get; set; }
public virtual User User { get; set; }
public virtual string PrepNumber { get; set; }
public virtual string Host { get; set; }
public virtual string NTermTag { get; set; }
public virtual string CTermTag { get; set; }
public virtual string Buffer { get; set; }
public virtual double ConcentrationMgPerMl { get; set; }
public virtual double StorageTemperatureCelsius { get; set; }
public virtual string PurificationProtocol { get; set; }
public virtual string Comments { get; set; }
public virtual string ProteinSequence { get; set; }
}
这是我发布的数据库映射:
public class ProteinSample : PersistentObject
{
public virtual SampleType SampleType { get; set; }
public virtual Project Project { get; set; }
public virtual long Variant { get; set; }
public virtual DateTime CreationDate { get; set; }
public virtual User User { get; set; }
public virtual IList<SampleMetadata> Metadata { get; set; }
}
public class SampleMetadata : PersistentObject
{
public virtual ProteinSample ProteinSample { get; set; }
public virtual MetadataType MetadataType { get; set; }
public virtual string Value { get; set; }
public virtual string LargeValue { get; set; }
}
public class MetadataType : PersistentObject
{
public virtual string Name { get; set; }
}
如果仔细观察,SampleMetadata类型具有MetadataType和两个值(大/常规)。 MetadataType有一个名称,这基本上是向用户询问样本的问题(准备号码是什么,N-Term氨基酸是什么等等)
我想通过以下方式有条件地查看MetadataType的名称:
If Name contains: "Prep Number"
populate the "PrepNumber" property on ProteinSampleDTO with SampleMetadata.Value
else if Name contains: "N-Term AA"
populate the "NTermTag" property on ProteinSampleDTO with SampleMetadata.LargeValue
//etc
你明白了。我想将MetdataType.Name中的内容与DTO属性名称进行匹配,并使用SampleMetadata类中的Value或Large Value中的值。
我可以更改属性的名称以更接近地匹配Name字符串,如果有约定有助于使这更容易。
似乎应该有一个光滑的方式来做到这一点,而不必手动制作一个大的怪物切换声明(有大约50个不同的问题)。
可以自动化处理吗?
答案 0 :(得分:2)