Tengo problemas para decidir la mejor forma de refactorizar un método que contiene consultas LINQ que son muy similares pero no idénticas.Método de refactorización que contiene consultas LINQ
Considere un método que es algo a lo largo de estas líneas:
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;
}
Esto es sólo un ejemplo, pero imagino que estoy necesitando para ejecutar una consulta diferente (diferente, ya que utiliza una ObjectSet diferente, utiliza un poco diferentes campos (object1id vs object2id) y devuelve un tipo diferente. Aparte de eso, las consultas son las mismas.
¿Hay alguna manera sensata de refactorizar este tipo de método? Parece que me he perdido algo obvio. Tal vez tengo que usar el método exacto y no puedo evitar volver a escribir la consulta, solo se ¡ems como DEBO poder de alguna manera!
Cualquier punteros apreciado considerablemente
lo probé con la reflexión, pero no pude pasar de la declaración de LINQ ("desde o en object1s donde o.object1id"). Debería buscar dinámicamente generar una declaración LINQ. – Graham
Hola, Graham, esta sería sin duda una opción, excepto por el hecho de que estoy tratando de mantener el DAL encapsulado en un Repositorio, lo que me limita en los métodos que puedo usar para construir dinámicamente una consulta. Traté de construir una fábrica para devolver la instancia concreta del Repositorio que quería. Pero esto me dejó en una situación similar a la que le describí a Paolo, es decir, porque mi Repositorio requiere un tipo concreto de EntityObject, por lo que no puedo crear uno basado en una interfaz. –
dougajmcdonald