【发布时间】:2012-04-12 15:19:34
【问题描述】:
我有 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;
}
提前致谢。
【问题讨论】:
标签: c# linq-to-sql generics .net-3.5 casting