我有些困难,无法决定如何最好地重构一个方法,这个方法包含了几乎相似但并不完全相同的 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;
}
这只是一个例子,但是想象一下我需要执行另一个查询(不同之处在于它使用不同的ObjectSet,使用略有不同的字段(object1id vs object2id)并返回不同的类型。除此之外,这些查询是相同的。
除此之外,这种方法有没有明智的重构方式?感觉好像我错过了什么显而易见的东西。也许我必须使用确切的方法,无法避免重新编写查询,只是似乎我应该可以以某种方式做到!任何指针都将不胜感激。