2011-04-13 3 views
2

인사말C# Linq in extension/method

linq 쿼리를 포함한 확장 메서드를 만들려고합니다. 는 내가 무엇을 찾고있어 하나 MODELNAME은 기업과 사용자 이름은 내가 주문하고자하는 분야이다이

var orderedList = OrderThisList<ModelName>(List<T> sourceList, //and something like m=>m.Username); 

같은 것을 할 수있는 방법 또는 확장 방법이다. 방법 당신은 목록을 정렬 할 자신의 확장 방법을 쓸 필요가 없습니다 var orderedList = myList.OrderBy(x => x.Username) 당신은 LINQ에 방법에 내장 사용해야

public List<T> OrderThisList<T>(//some linq property?) 
{ 
    //What code goes here? 
} 
+0

데이터의 출처는 어디입니까? –

+0

좋은 질문입니다! 편집 –

+0

'List '을 이미 넘긴다면'OrderBy'를 직접 사용하지 않으시겠습니까? 아니면 현재 위치에서 목록을 정렬하려고합니까? 귀하의 질문을 명확히하십시오. –

답변

3

편집 : 아직이 질문은 모든 것 매우 불분명하지만, 우리는 등 OrderBy를 사용에 문제가

입니다

경우 SQL로 메모리 컬렉션보다는 LINQ 상대하고있는 것 같은데 그 자리에 목록을 정렬하지 않는 경우, 사용자 정의 비교기를 통과하는 List<T>.Sort()을 사용해야합니다.

MiscUtil 프로젝트에 도움이되는 몇 가지 도우미 유형이 있습니다. 예를 들어 :

var comparison = ProjectionComparer<ModelType>.Create(m => m.SomeProperty) 
               .ThenBy(m => m.SomeOtherProperty); 
list.Sort(comparison); 
당신은 SQL에 LINQ를 사용하고 당신이 data context 가지고있는 경우에

, 당신은 사용할 수 있습니다

public List<TSource, TKey> OrderThisList<TSource, TKey>(
    Expression<Func<TSource, TKey>> ordering) 
{ 
    return dataContext.GetTable<TSource>() 
         .OrderBy(ordering) 
         .ToList(); 
} 

지금 분명히 그 유형의 인수가 필요

, 당신은 하나만 지정하고 싶을뿐입니다. 여기에는 여러 가지 방법이 있습니다. 기본적으로 유추 할 수있는 형식 인수 ( TKey)를 사용하는 일반 형식 및 메서드로 끝내기를 원할 것입니다. 예를 들면 :

var list = Orderer<ModelType>.Create(dataContext) 
          .OrderThisList(m => m.SomeProperty); 

OrderBy 이미 사용할 수 있음을 고려하더라도 그것은 ... 다소 일주 주택의 당신이 원하는 이유를 설명 할 수있는, 또한 어떤 LINQ 공급자가 참여하고있다?

+0

나는 50 줄의 주문 코드를 더 작은 것으로 변환하는 방법을 찾고있다. –

+2

@Levisaxos : 주문 코드의 50 줄이 무엇인지 모르는 사이에, 당신을 도울 수 없습니다. http://tinyurl.com/so-hints –

+0

감사합니다.하지만 copywrite로 인해 모든 세부 사항을 제공 할 수는 없습니다. 이것은 나를 위해 지금 도움이됩니다! –

2

처럼 보일 것입니다.

+0

나는해야한다. 그러나 나는 이것이 내 질문에 답하지 않는다. –

+3

@Levisaxos :하지만 * 왜 * 당신은 그렇지 않습니까? 답이 도움이되지 않는다면 그 이유를 설명해야합니다. 그러면 다른 답이 주어져 도움이 될 것입니다. 현재 이것은 "내가 생각하고있는 숫자를 맞춰라." –