Is there a way to make the following code more maintainable?
public static DtoNumOrderedNumDone GetNumOrderedNumDone(int jobTaskId)
{
const string selectList = "Quantity, NumDone";
var sql =
@$"select convert(int,numordered) as Quantity , convert(int,sum(isnull(numDone,0))) as NumDone
from task k left outer join taskdone d on k.jobtaskid = d.jobtaskid
inner join job j on k.jobid = j.jobid
where k.jobtaskid = {jobTaskId}
group by k.jobtaskid, j.NumOrdered";
var tokens = selectList.Tokenize();
var quantityOrdinal = Array.IndexOf(tokens, "Quantity");
var numdoneOrdinal = Array.IndexOf(tokens, "NumDone");
var dtos = DataHelpers.RawSqlQuery(sql, x => new DtoNumOrderedNumDone()
{
NumDone = x.GetInt32(numdoneOrdinal),
Quantity = x.GetInt32(quantityOrdinal)
}
);
var dto = dtos.FirstOrDefault();
return dto;
}
I aren't worried about sql injection because jobTaskId is an int, however I am worried that the code is vulnerable to being altered later and the field order being made incorrect.