【发布时间】:2011-12-06 13:48:18
【问题描述】:
我在决定重构包含非常相似但不相同的 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 与 object2id)并返回不同的类型。 除此之外,查询是相同的。
有没有明智的方法来重构这种方法?感觉就像我错过了一些明显的东西。也许我必须使用确切的方法并且我无法避免重写查询,看起来我应该能够以某种方式!
非常感谢任何指针
【问题讨论】:
-
我尝试使用反射,但无法通过 LINQ 语句(“from o in object1s where o.object1id”)。您应该研究动态生成 LINQ 语句。
-
嗨格雷厄姆,这肯定是一个选择,除了我试图将 DAL 封装在存储库中的事实之外一个问题。我试图建立一个工厂来返回我想要的具体 Repository 实例。但这让我陷入了与 Paolo 描述的类似情况,即因为我的 Repository 需要一个具体的 EntityObject 类型,所以我无法基于接口创建一个。
标签: c# asp.net linq refactoring