Mam niewielki problem z wyborem najlepszego sposobu na zreorganizowanie metody zawierającej zapytania LINQ, które są bardzo podobne, ale nie identyczne.Metoda refaktoryzacji zawierająca zapytania LINQ
Rozważmy metodę, która jest coś wzdłuż tych linii:
public SomeObject GetTheObject(IMyObject genericObject) {
Type t = genericObject.GetType();
SomeObject so = null;
switch(t.Name) {
case "Type1":
var object1 = (from o in object1s where o.object1id == genericObject.id).FirstOrDefault();
so = (SomeObject)object1;
break;
case "Type2":
var object2 = (from o in object2s where o.object2id == genericObject.id).FirstOrDefault();
so = (SomeObject)object2;
break;
default:
break;
}
return so;
}
To tylko ilustracja, ale wyobraź sobie, ja potrzebuje na wykonanie innego zapytania (różni się tym, że używa innego ObjectSet, wykorzystuje niewielkie różne pola (object1id vs object2id) i zwraca inny typ Poza tym kwerendy są takie same:
Czy istnieje rozsądny sposób na refaktoryzację tego rodzaju metody? Wydaje się, że brakowało mi czegoś oczywistego. Być może muszę użyć dokładnej metody i nie mogę uniknąć ponownego napisania zapytania, to tylko se ems jak powinienem być w stanie jakoś!
Wszelkie wskazówki mile widziana
próbowałem go z refleksji, ale nie mógł ominąć rachunku LINQ ("od o w obiektach, gdzie o.object1id"). Powinieneś przyjrzeć się dynamicznemu generowaniu instrukcji LINQ. – Graham
Witam Graham, z pewnością byłaby to opcja z wyjątkiem faktu, że staram się przechowywać DAL zamknięty w repozytorium, co pozostawia mnie ograniczoną w metodach, których mogę użyć do dynamicznego budowania zapytania. Próbowałem zbudować fabrykę, aby zwrócić konkretną instancję Repozytorium, której potrzebowałem. Ale to pozostawiło mnie w sytuacji podobnej do opisanej przez Paolo, ponieważ moje repozytorium wymaga konkretnego typu EntityObject, którego nie mogę utworzyć opartego na interfejsie. –
dougajmcdonald