我在决定重构包含非常相似但不完全相同的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和object2id)并返回不同的类型 除此之外,查询是相同的
有没有一种明智的方法来重构这种方法?感觉就像我错过了一些明显的东西。也许我必须使用确切的方法,我无法避免重写查询,它只是ems像我应该能够以某种方式!
任何指针十分赞赏
我尝试了与反思,但不能让过去的LINQ语句( “从o的object1s where o.object1id”)。你应该看看动态生成一个LINQ语句。 – Graham
嗨格雷厄姆,这肯定是一个选择,除了我试图保持封装在存储库中的DAL,这使我受限于我可以用来动态构建查询的方法。我试图建立一个工厂来返回我想要的具体Repository实例。但是这给我留下了类似于Paolo所描述的情况,即因为我的Repository需要一个具体的EntityObject类型,所以我不能根据接口创建一个。 –
dougajmcdonald