【发布时间】:2019-03-29 13:58:27
【问题描述】:
我有 2 个表,tblA 和 tblB,具有相同的字段和类型。我通过 linq to sql 获取数据,所以我有 2 个部分类 clsTblA 和 clsTblB。
我有一个选择 tblA 或 tblB 的组合,我必须读取该表并进行一些查询。
我想要做的是避免重复代码以运行相同的方法。 所以现在我有了(伪代码):
if (combo == "A")
{
List<clsTblA> listUserNow = ctx.clsTblA.Where(p => p.blabla).ToList();
List<clsTblA> listUserLastYear = ctx.clsTblA.Where(q => q.blabla).ToList();
}
if (combo == "B")
{
List<clsTblB> listUserNow = ctx.clsTblB.Where(p => p.blabla).ToList();
List<clsTblB> listUserLastYear = ctx.clsTblB.Where(q => q.blabla).ToList();
}
但我有这样的想法(在伪代码中):
SupClsTable clsTblX = null;
if (combo == A)
clsTblX = new clsTblA();
if (combo == B)
clsTblX = new clsTblB();
List<clsTblX> listUserNow = tblX.QueryForNow();
List<clsTblX> listUserLastYear = tblX.QueryForLastYear();
是否存在这样的东西? 我也搜索了设计模式,但没有结果。
提前致谢。
编辑 1: 此时代码是这样的:
if (combo == A)
{
using (DbDataContext ctx = new DbDataContext())
{
List<clsTblA> listUserNow = ctx.clsTblA.Where(p => p.blabla).ToList();
List<clsTblA> listUserLastYear = ctx.clsTblA.Where(q => q.blabla).ToList();
}
}
if (combo == B)
{
using (DbDataContext ctx = new DbDataContext())
{
List<clsTblB> listUserNow = ctx.clsTblB.Where(p => p.blabla).ToList();
List<clsTblB> listUserLastYear = ctx.clsTblB.Where(q => q.blabla).ToList();
}
}
所以我有两次 listUserNow 和 listUserLastYear。 我怎样才能让我返回一个独特的
using (DbDataContext ctx = new DbDataContext())
{
List<*something*> listUserNow = ctx.*something*.Where(p => p.blabla).ToList();
List<*something*> listUserLastYear = ctx.*something*.Where(p => p.blabla).ToList();
}
独立于“if combo”? 提前感谢
【问题讨论】:
-
你为什么不使用接口?就此而言,如果两个类都相同,为什么会有两个类?
-
删除第二个表(和类),添加列(和属性),如
type值AANDB...现在你有一个表和一个类...问题已解决 (Where(p => p.blablam && p.type="A")) -
tblA 和 tblB 已从利益相关者那里设置..
-
@CodeIT,利益相关者给你要求,而不是数据库实现。如果他们坚持这样做,通常这不是一个好兆头
-
我完全可以相信,您需要两个课程可能是有充分理由的。我会选择一个通用的基类,并尝试尽可能多地放在那里。然后将表 A 和表 B 类作为孩子。他们尽可能少,他们只是尽可能多地委托给基地。
标签: c# oop design-patterns