我有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