我有3个不同的数据库表,它们具有相同的5个字段,但没有任何外键关系,因为它们实际上并没有保持相同的值,而是等价的;例如:CompanyA表有productA,CompanyB有productB。只使用一种方法,接受不同类型的参数
所以我有3个不同的集合包括3个等效的字段。所以我想要做的是使用一个具有companyType和ProductName属性的类,并且只使用一个方法将这3个不同的集合转换为一个类对象,比如ResultClass。
public class ResultClass
{
public EnumCompanyType CompanyType { get; set; }
public string ProductName { get; set; }
public ICollection<ResultClass> ConvertAnything(ICollection<T> collection)
{
//Cast it to ResultClass
return resultClassCollection;
}
}
所以,我可以用这个像:
ICollection<ProductA> aCollection = GetCompanyAData();
ICollection<ProductB> bCollection = GetCompanyBData();
ConvertAnything(aCollection);
ConvertAnything(bCollection);
我已经试过“动态”的,但实际上不知道原则(既没有知识);所以我搞砸了,我认为这不适合这个东西。
我试图创建一个扩展方法,但由于扩展没有类型的参数(因为它是使用ICollection的),我无法访问的项目(如属性)
领域我使用LinqToSql和所有的数据库表术语等属于这个概念,没有别的。
编辑:
我想我应该自己清楚: ,我试图避免的(或不应该我,还在想)的多个实例,就像下面
public ICollection<ResultClass> ConvertAnythingForA(ICollection<ProductA> collection)
{
foreach(var item in collection)
{
var result = new ResultClass
{
ProductName = item.ProductA,
ProductType = EnumProductType.ProductA
};
resultClassCollection.Add(result);
}
return resultClassCollection;
}
public ICollection<ResultClass> ConvertAnythingForB(ICollection<ProductB> collection)
{
foreach(var item in collection)
{
var result = new ResultClass
{
ProductName = item.ProductB,
ProductType = EnumProductType.ProductB
};
resultClassCollection.Add(result);
}
return resultClassCollection;
}
谢谢提前。
仿制药的万岁! :) – 2012-03-29 01:20:55
是的,我试过这个,因为我在问题中已经解释过,但是这种方式既然是通用的,我不能访问属性;像集合[0] .ProductName!它们的结构并不完全相同,它们具有不同名称的列,其值相同 – 2012-03-29 01:23:18
这就是类型约束的原因。如果将其限制在界面上,则可以访问界面中定义的任何内容。 – Japple 2012-03-29 01:26:29