我有两个方法,一类很相似:删除代码重复
public class MyClass
{
public MyClass()
{
}
public IQueryable<tbl_Person> PersonSelect1()
{
var ctx = new MyContextSQL();
var temp = ctx.tbl_Person.Include("tbl_Student").Include("Department").Where(x =>
(x.int_statID == 2 || x.int_statID == 1 || x.int_statID == 9)
&& (x.department != 90 && x.department != 94) // only difference
&& (x.workID == 789 || x.workID == 567)
&& (x.clientID != 789247)
&& (x.auditID != 9)
&& (x.expDate >= new DateTime(2017, 1, 1))
&& (x.expDate <= DateTime.Today));
var result = temp.OrderByDescending(x => x.expDate);
return result;
}
public IQueryable<tbl_Person> PersonSelect2()
{
var ctx = new MyContextSQL();
var temp = ctx.tbl_Person.Include("tbl_Student").Include("Department").Where(x =>
(x.int_statID == 2 || x.int_statID == 1 || x.int_statID == 9)
&& (x.department == 90 || x.department == 94) //only difference
&& (x.workID == 789)
&& (x.clientID != 789247)
&& (x.auditID != 9)
&& (x.expDate >= new DateTime(2017, 1, 1))
&& (x.expDate <= DateTime.Today));
var result = temp.OrderByDescending(x => x.expDate);
return result;
}
}
只有PersonSelect1()
和PersonSelect2()
之间不同的一条线,我不喜欢它的样子,因为有很多的代码重复。 我一直在思考在解决这样的:
public IQueryable<tbl_Person> ThirdMethod()
{
var ctx = new MyContextSQL();
var temp = ctx.tbl_Person.Include("tbl_Student").Include("Department").Where(x =>
(x.int_statID == 2 || x.int_statID == 1 || x.int_statID == 9)
&& (x.workID == 789)
&& (x.clientID != 789247)
&& (x.auditID != 9)
&& (x.expDate >= new DateTime(2017, 1, 1))
&& (x.expDate <= DateTime.Today));
var result = temp.OrderByDescending(x => x.expDate);
return result;
}
public IQueryable<tbl_Person> PersonSelect1()
{
var result = this.ThirdMethod().Where(x => (x.department != 90 || x.department != 94));
return result;
}
public IQueryable<tbl_Person> PersonSelect2()
{
var result = this.ThirdMethod().Where(x => (x.department == 90 || x.department == 94));
return result;
}
那是考虑到ThirdMethod()
将连接到数据库,然后从PersonSelect1()
或PersonSelect2()
我会再次循环针对收集源于ThirdMethod()
呼叫的最佳方法呢?我正在考虑性能,并试图在同一时间避免重复的代码。
&&(x.department!= 90 || x.department!= 94)//唯一的区别这会八方通是真的 –
我粘贴一个老版本的代码并没有意识到这件事,这是现在在这里更新反正,谢谢 – AlexGH
为什么你不用共享参数创建一个SQL视图,这样你的c#代码只会调用视图和过滤器,使用'x.department!= 90 || x.department!= 94' /'x.department!= 90 || x.department == 94' – maccettura