Ich habe 3 verschiedene Datenbanktabellen, die die gleichen 5 Felder haben, aber diese haben keine Fremdschlüsselbeziehung, da sie nicht den gleichen Wert in der Tat, aber die Äquivalente; wie: CompanyA Tabelle hat productA und CompanyB hat productB.Verwenden Sie nur eine Methode, die verschiedene typisierte Parameter akzeptiert
so habe ich 3 verschiedene Sammlungen gehören 3 Felder, die gleichwertig sind. Also möchte ich eine einzelne Klasse mit den Eigenschaften companyType und ProductName verwenden und nur eine Methode verwenden, um diese 3 verschiedenen Sammlungen in ein einziges Klassenobjekt umzuwandeln, sagen wir 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;
}
}
Damit ich dies wie verwenden:
ICollection<ProductA> aCollection = GetCompanyAData();
ICollection<ProductB> bCollection = GetCompanyBData();
ConvertAnything(aCollection);
ConvertAnything(bCollection);
Ich habe versucht, „dynamisch“, aber eigentlich nicht wissen, das Prinzip (weder über das Wissen); also habe ich es vermasselt und ich denke es ist nicht für dieses Zeug.
Ich habe versucht, eine Erweiterungsmethode zu schaffen, aber da die Erweiterung keinen Typen für seine Parameter hat (wie es ICollection verwendet), kann ich keinen Zugriff auf die Felder der Elemente (z. B. Eigenschaften)
Ich benutze LinqToSql und alle Begriffe der Datenbanktabelle gehören zu diesem Konzept, sonst nichts.
edit:
Ich glaube, ich sollte mich klar gemacht: mehrere Instanzen, die ich zu vermeiden, bin versucht (oder sollte ich nicht, denken noch) wie unten
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;
}
Dank im Voraus.
Hurra für Generika! :) –
Ja, ich habe das versucht, wie ich in der Frage erklärte, aber so, da es ein generisches sein wird, kann ich nicht auf die Eigenschaften zugreifen; wie Sammlung [0] .ProductName! Und sie haben nicht genau dieselbe Struktur, sie haben anders benannte Spalten mit äquivalenten Werten –
Das ist der Grund für die Typenzwang. Wenn Sie es auf die Schnittstelle beschränken, können Sie auf alles zugreifen, das in der Schnittstelle definiert ist. – Japple