Reputation: 328
I have 40 datasets, but when user click some of them I need to map their ID's to another dataset:
public async Task<PagedResult<DataSetUpdateViewModel>> Handle(GetDataSetUpdateByDataSetIdQuery request, CancellationToken cancellationToken)
{ //this I need to refactor
if(request.ID==29)
{
request.ID = 28;
request.DeleteAble = true;
}
if(request.ID==30)
{ request.ID=31;
request.DeleteAble = true;
}
if(request.ID==32)
{ request.ID=31;
request.DeleteAble = true;
}
if(request.ID==33)
{ request.ID=31;
request.DeleteAble = true;
}
//if request.ID is not 29,30,32 or 33, then it should be pass as it is
var datasetUpdates = _context.DatasetUpdates
.Where(c => request.ID > 0 && c.DatasetId == request.ID)
.ProjectTo<DataSetUpdateViewModel>(_mapper.ConfigurationProvider,new { isDeleteAble = request.DeleteAble });
PagedResult<DataSetUpdateViewModel> result = new PagedResult<DataSetUpdateViewModel>();
result = await datasetUpdates.DynamicOrderBy("UpdateDate", "DESC")
.GetPagedAsync(request.PageNumber, request.PageSize, cancellationToken);
return result;
}
My GetDataSetUpdateByDataSetIdQuery
looks like
public int ID { get; set; }
public int PageNumber { get; set; }
public int PageSize { get; set; }
public bool DeleteAble { get; set; }
I know I can assign Enums to these numbers, but it still does not solve a lot of if
conditions
Upvotes: 0
Views: 68
Reputation: 117124
It's maybe not as nice, but I like it:
public static class Ex
{
public static Func<K, V> Map<K, V>(this IDictionary<K, V> source, Func<K, V> @default)
=> key => (key == null || !source.ContainsKey(key)) ? @default(key) : source[key];
}
Then you do:
var request = new Request() { ID = 29 };
var map = new Dictionary<int, (int, bool)>
{
{29, (28, true)},
{30, (31, true)},
{32, (31, true)},
{33, (31, true)}
}.Map(k => (k, false));
(request.ID, request.DeleteAble) = map(request.ID);
Upvotes: 0
Reputation: 34429
Use a Datatable for lookup :
DataTable dt = new DataTable();
dt.Columns.Add("old id", typeof(int));
dt.Columns.Add("new id", typeof(int));
dt.Columns.Add("deletable", typeof(Boolean));
dt.Rows.Add(new object[] { 29, 28, true });
dt.Rows.Add(new object[] { 30, 31, true });
dt.Rows.Add(new object[] { 32, 31, true });
dt.Rows.Add(new object[] { 33, 31, true });
DataRow searchResults = dt.AsEnumerable().Where(x => x.Field<int>("old id") == 32).FirstOrDefault();
int newId = searchResults.Field<int>("new id");
Upvotes: -1
Reputation: 174690
Use a simple Dictionary<int, int>
:
internal static Dictionary<int, int> _queryMapping = new Dictionary<int, int>
{
{29, 28},
{30, 31},
{32, 31},
{33, 31}
}
// ...
public async Task<PagedResult<DataSetUpdateViewModel>> Handle(GetDataSetUpdateByDataSetIdQuery request, CancellationToken cancellationToken)
{
if(_queryMapping.ContainsKey(request.ID)){
request.ID = _queryMapping[request.ID];
request.DeleteAble = true;
}
// ...
}
Upvotes: 3