Dc2b5374b8c24a20577346b9b1e4891f

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
}

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 !

A12a0565d032994007450e9c7dea6976

Chris Martin

August 11, 2010, August 11, 2010 23:40, permalink

No rating. Login to rate!

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);
        }
A12a0565d032994007450e9c7dea6976

Chris Martin

August 11, 2010, August 11, 2010 23:44, permalink

No rating. Login to rate!

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());
        }
A12a0565d032994007450e9c7dea6976

Chris Martin

August 11, 2010, August 11, 2010 23:47, permalink

2 ratings. Login to rate!

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());
        }
Dc2b5374b8c24a20577346b9b1e4891f

programmerist

August 15, 2010, August 15, 2010 17:42, permalink

No rating. Login to rate!

Thanks this is best answer!!!!

Your refactoring





Format Copy from initial code

or Cancel