2010-08-11 30 views
1

我想使用泛型类短我的代码,因为如何使用泛型类通过linq编写有用的代码?

1)GetMaintData(INT任务id)RelTypeId和RefMaintenance
2)GetAliSpReqs(INT任务id)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

事情是这样的:

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为对象 - 如果这是LINQ to SQL(或类似的东西),那么您应该指定IQueryable<TaskRelation>Expression<Func<TaskRelation, string>>,以便过滤和投影可以在数据源完成。