我有一个类似于下面的方法,即在筛选和排序后获取列表。C#中,如何组织这段代码?
var sample = dbContext.sample;
// search
if (!String.IsNullOrEmpty(searchModel.name)){
sample = sample.Where(x=> x.name == searchModel.name);
}
if (!String.IsNullOrEmpty(searchModel.modelNo)){
sample = sample.Where(x=> x.modelNo == searchModel.modelNo);
}
if (!String.IsNullOrEmpty(searchModel.serialNo)){
sample = sample.Where(x=> x.serialNo == searchModel.serialNo);
}
if (!String.IsNullOrEmpty(searchModel.manufacture)){
sample = sample.Where(x=> x.manufacture == searchModel.manufacture);
}
if (!String.IsNullOrEmpty(searchModel.managerId)){
sample = sample.Where(x=> x.managerId == searchModel.managerId);
}
if (!String.IsNullOrEmpty(searchModel.location)){
sample = sample.Where(x=> x.location == searchModel.location);
}
// sort
if (searchModel.sortMethod == 'asc') {
switch (searchModel.sortField) {
case 'name':
sample = sample.OrderBy(x => x.name);
break;
case 'modelNo':
sample = sample.OrderBy(x => x.modelNo);
break;
case 'serialNo':
sample = sample.OrderBy(x => x.serialNo);
break;
case 'manufacture':
sample = sample.OrderBy(x => x.manufacture);
break;
case 'managerId':
sample = sample.OrderBy(x => x.managerId);
break;
case 'location':
sample = sample.OrderBy(x => x.location);
break;
default:
sample = sample.OrderBy(x => x.id);
break;
}
} else {
switch (searchModel.sortField) {
case 'name':
sample = sample.OrderByDescending(x => x.name);
break;
case 'modelNo':
sample = sample.OrderByDescending(x => x.modelNo);
break;
case 'serialNo':
sample = sample.OrderByDescending(x => x.serialNo);
break;
case 'manufacture':
sample = sample.OrderByDescending(x => x.manufacture);
break;
case 'managerId':
sample = sample.OrderByDescending(x => x.managerId);
break;
case 'location':
sample = sample.OrderByDescending(x => x.location);
break;
default:
sample = sample.OrderByDescending(x => x.id);
break;
}
}
return sample.ToList();
这是肮脏和很长,所以我用不同的方法,如组织,
private DbSet<Sample> Filter(DbSet<sample> sample, SearchModel searchModel) {
// search
if (!String.IsNullOrEmpty(searchModel.name)){
sample = sample.Where(x=> x.name == searchModel.name);
}
//...
return sample;
}
private DbSet<Sample> Sorting(DbSet<sample> sample, SearchModel searchModel) {
// sort
if (searchModel.sortMethod == 'asc') {
switch (searchModel.sortField) {
case 'name':
sample = sample.OrderBy(x => x.name);
break;
return sample;
// ...
return sample;
}
现在是一个小组织,但仍然是很长的。
我不认为Pro将永远不会做这种方式。
请咨询我,我怎么能很好地清洁该组织的代码。
我认为这个问题是比较适合[代码审查(http://codereview.stackexchange.com/) – gudthing
你是否会让问题更具体,例如“重构如果杂牌”或“重构开关” – mrAtari