public class EngGetCalculatedTaskField
{
private static TaskMaintenanceDataDataContext engTaskCtx { get; set; }
public EngGetCalculatedTaskField()
{
engTaskCtx = new TaskMaintenanceDataDataContext();
}
public string GetMaintData(int taskID)
{
var query = engTaskCtx.TaskRelations.Where(r => r.TaskId == taskID &&
r.RelTypeId == 12).Select(r => r.RefMaintenance.shortdesc);
return string.Join("; ", query.ToArray());
}
public string GetAliSpReqs(int taskID)
{
var query = engTaskCtx.TaskRelations.Where(r => r.TaskId == taskID
&& r.RelTypeId == 13)
.Select(r => r.RefAliSpReq.shortdesc);
return string.Join("; ", query.ToArray());
}
public string GetAccess(int taskID)
{
var query = engTaskCtx.TaskRelations.Where(r => r.TaskId == taskID
&& r.RelTypeId == 15)
.Select(r => r.RefAccessPanel.shortdesc);
return string.Join("; ", query.ToArray());
}
public string GetZone(int taskID)
{
var query = engTaskCtx.TaskRelations.Where(r => r.TaskId == taskID
&& r.RelTypeId == 14)
.Select(r => r.RefZone.shortdesc);
return string.Join("; ", query.ToArray());
}
Refactorings
No refactoring yet !
Chris Martin
August 11, 2010, August 11, 2010 23:40, permalink
Not sure I understand your question fully but, here goes. You won't be saving anything but a few keystrokes really.
public string GetMaintData(int taskID)
{
var query = Query(r => r.TaskId == taskID &&
r.RelTypeId == 12).Select(r => r.RefMaintenance.shortdesc);
return string.Join("; ", query.ToArray());
}
public string GetAliSpReqs(int taskID)
{
var query = Query(r => r.TaskId == taskID
&& r.RelTypeId == 13)
.Select(r => r.RefAliSpReq.shortdesc);
return string.Join("; ", query.ToArray());
}
public string GetAccess(int taskID)
{
var query = Query(r => r.TaskId == taskID
&& r.RelTypeId == 15)
.Select(r => r.RefAccessPanel.shortdesc);
return string.Join("; ", query.ToArray());
}
public string GetZone(int taskID)
{
var query = Query(r => r.TaskId == taskID && r.RelTypeId == 14).Select(r => r.RefZone.shortdesc);
return string.Join("; ", query.ToArray());
}
private IEnumerable<TaskRelation> Query(Predicate<TaskRelation> predicate)
{
return engTaskCtx.TaskRelations.Where(predicate);
}
Chris Martin
August 11, 2010, August 11, 2010 23:44, permalink
Actually, this is even better. I think. ;.)
private static TaskMaintenanceDataDataContext engTaskCtx { get; set; }
public EngGetCalculatedTaskField()
{
engTaskCtx = new TaskMaintenanceDataDataContext();
}
public string GetMaintData(int taskID)
{
return Query(r => r.TaskId == taskID && r.RelTypeId == 12, r => r.RefMaintenance.shortdesc);
}
public string GetAliSpReqs(int taskID)
{
return Query(r => r.TaskId == taskID && r.RelTypeId == 13, r => r.RefAliSpReq.shortdesc);
}
public string GetAccess(int taskID)
{
return Query(r => r.TaskId == taskID && r.RelTypeId == 15, r => r.RefAccessPanel.shortdesc)
}
public string GetZone(int taskID)
{
return Query(r => r.TaskId == taskID && r.RelTypeId == 14, r => r.RefZone.shortdesc);
}
private string Query(Predicate<TaskRelation> predicate, Func<TaskRelation, string> select)
{
var query = engTaskCtx.TaskRelations.Where(predicate).Select(select);
return string.Join("; ", query.ToArray());
}
Chris Martin
August 11, 2010, August 11, 2010 23:47, permalink
And to take it one step further...
I hope you can see that refactoring is an iterative process.
private static TaskMaintenanceDataDataContext engTaskCtx { get; set; }
public EngGetCalculatedTaskField()
{
engTaskCtx = new TaskMaintenanceDataDataContext();
}
public string GetMaintData(int taskID)
{
return Query(taskID, 12, r => r.RefMaintenance.shortdesc);
}
public string GetAliSpReqs(int taskID)
{
return Query(taskID, 13, r => r.RefAliSpReq.shortdesc);
}
public string GetAccess(int taskID)
{
return Query(taskID, 15, r => r.RefAccessPanel.shortdesc);
}
public string GetZone(int taskID)
{
return Query(taskID, 14, r => r.RefZone.shortdesc);
}
private string Query(int taskId, int relTypeId, Func<TaskRelation, string> select)
{
var query = engTaskCtx.TaskRelations
.Where(r => r.TaskId == taskId && r.RelTypeId == relTypeId)
.Select(select);
return string.Join("; ", query.ToArray());
}
i want to use generic class to shorter my codes because
1) GetMaintData(int taskID) RelTypeId and RefMaintenance
2) GetAliSpReqs(int taskID) RelTypeId and RefAliSpReq
if you look below method you can see only TypeId and Ref data. i think that i can write new clear codes via generic class like that:
http://www.thereforesystems.com/dynamic-sort-with-linq/
public void GetData<TKey>(List<TaskRelation> cities, Func<TaskRelation, TKey> selector)
{
//include all GetMaintData,GetAliSpReqs,GetZone,GetAccess
}