Метод рефакторинга, содержащий запросы LINQ

У меня возникли небольшие проблемы с определением наилучшего способа рефакторинга метода, который содержит запросы 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) и возвращает другой тип. В остальном запросы такие же.

Есть ли разумный способ рефакторинга такого метода? Такое чувство, что я упустил что-то очевидное. Возможно, мне нужно использовать точный метод, и я не могу избежать повторного написания запроса, просто кажется, что я ДОЛЖЕН каким-то образом уметь!

Любые указатели приветствуются

6
задан dougajmcdonald 6 December 2011 в 13:48
поделиться