2013-03-13 2 views
1

LINQ 쿼리에서 SELECT에 대한 템플릿을 만들 수 있습니까? 지금은 정확한 동일한 SELECT를 사용하는 6 메서드가 있습니다. 가능한 경우 템플릿을 사용하고 싶습니다.템플릿 선택

이 코드는 제가 사용하고있는 코드입니다. 선택을 변경하고 싶을 때 코드의 많은 부분에서 같은 것을 변경해야합니다. 당신의 예에서

, 당신은 익명의 유형 소스 유형을 변환하고 있습니다 :

result = query.Select(b => new 
{ 
    route_id = b.b.route_id, 
    name = b.b.name, 
    description = b.b.description, 
    distance = b.b.distance, 
    distance_to_route = (int)b.distance_to_from_me, 
    departure_place = b.b.departure_place, 
    arrival_place = b.b.arrival_place, 
    owner = b.b.user.username, 
    average_rating = b.avg_rating, 
    is_favorite = b.is_favorite, 
    date = b.b.date, 
    attributes = b.b.route_attributes.Select(c => 
     c.route_attribute_types.attribute_name), 
    coordinates = b.b.coordinates.Select(c => 
     new coordinateToSend { sequence = c.sequence, 
      lat = c.position.Latitude, 
      lon = c.position.Longitude }) 
}); 
+10

적절한 생성자로 클래스를 사용하지 않는 이유는 무엇입니까? –

+0

AutoMapper와 같은 일부 매퍼를 시험해 보시고 팀의 제안을 따르십시오 – TalentTuner

+0

그래서 나를위한 선택을 만드는 클래스를 만들 수 있습니까? – user2049921

답변

1

여기에 당신이 할 수있는 한 가지 방법의 간단한 예입니다. 당신은 예를 들어, 변환/결과 유형을 나타내는 클래스를 만들 수 있습니다 당신은 이제

public class SourceClass 
    { 
     public string SourcePropA { get; set; } 
    } 

을 :

예제를 위해서
public class ResultClass 
    { 
     public string ResultPropA { get; set; } 
    } 

는, 다음은 소스 클래스의 정의했다 말할 수 원본 및 결과 개체에 대한 형식 정의를 만들려면 원본 클래스의 컬렉션을 결과 클래스의 컬렉션으로 변환하는 확장 메서드를 만들면됩니다.

public static class SourceToResultRepository 
    { 
     public static IEnumerable<ResultClass> ConvertSourceToResult 
      (this IEnumerable<SourceClass> source) 
     { 
      return source.Select(s => new ResultClass 
      { 
       ResultPropA = s.SourcePropA 
       //Add all other property transformations here 
      }); 
     } 
    } 

A 여기서 변환을 수행해야하는 곳에서 사용할 수있는 방법에 대한 예가 있습니다.

//Extension usage: 
var result = Database.Source.ConvertSourceToResult(); 

//Direct usage: 
var result = SourceToResultRepository.ConvertSourceToResult(Database.Source); 
관련 문제