Как я могу использовать универсальный класс для написания полезных кодов через linq? - PullRequest
1 голос
/ 11 августа 2010

Я хочу использовать универсальный класс, чтобы сократить мои коды, потому что

1) GetMaintData (int taskID) RelTypeId и RefMaintenance
2) GetAliSpReqs (int taskID) RelTypeId и RefAliSpReq

если вы посмотрите ниже метод, вы можете увидеть только данные TypeId и Ref. Я думаю, что я могу написать новые чистые коды с помощью общего класса, как это:

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

1 Ответ

1 голос
/ 11 августа 2010

Примерно так:

public string GetList(IEnumerable<TaskRelation> relations,
                      int taskId, int relTypeId,
                      Func<TaskRelation, string> projection)
{
    var query = relations.Where(r => r.TaskId == taskId && 
                                     r.RelTypeID == relTypeId)
                         .Select(projection));
                         .ToArray()
    return string.Join("; ", query.ToArray());
}

Тогда используйте это так:

string zones = GetList(reslations, taskID, 14, r => r.RefZone.shortdesc);

Обратите внимание, что я предположил, что LINQ to Objects - если это LINQ to SQL (или что-то подобное), то вам следует указать IQueryable<TaskRelation> и Expression<Func<TaskRelation, string>>, чтобы фильтрация и проецирование могли выполняться в источнике данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...