У меня возникли небольшие проблемы с определением наилучшего способа рефакторинга метода, который содержит запросы LINQ, которые очень похожи, но не идентичны.
Рассмотрим метод, который представляет собой нечто подобное:
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;
}
Это просто иллюстрация, но представьте, что мне нужно выполнить другой запрос (отличается тем, что он использует другой набор объектов, использует несколько другие поля (object1id vs object2id) и возвращает другой тип. В остальном запросы такие же.
Есть ли разумный способ рефакторинга такого метода? Такое чувство, что я упустил что-то очевидное. Возможно, мне нужно использовать точный метод, и я не могу избежать повторного написания запроса, просто кажется, что я ДОЛЖЕН каким-то образом уметь!
Любые указатели приветствуются