2017-04-22 3 views
3

나는 IComparer과 비슷한 "자연스럽게"데이터를 정렬하는 좋은 방법을 가지고 있습니다. 답변은 Natural Sort Order in C#입니다. 내 경우, 나는 이런 식의 클래스가 있습니다자연스럽게 WCF에서 IQueryable 문자열을 정렬

public class Widget 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

나는의 데이터를 반환 다음과 같은 하나로, OData 쿼리를 사용하여 다음과 같이 읽어 수집,

[{Id: 1, Name: "2 N. Street"},{Id: 2, Name: "33 N. Street"},{Id: 3, Name: "4 N. Street"}] 

이있는 경우 상기와 같은 순서로, 실제로 데이터를 싶습니다 동안

http://www.example.com/Widget.svc/GetWidgets?$orderby=Name 

"자연"과 같은 순서 :

[{Id: 1, Name: "2 N. Street"},{Id: 3, Name: "4 N. Street"},{Id: 2, Name: "33 N. Street"}] 

"자연스럽게"데이터를 정렬하기 위해 문자열 속성에 따라 정렬을 시도하는 쿼리를 만들기 위해 WCF 서비스를 사용자 지정하는 좋은 방법이 있습니까?

+0

내가 발견 한이 문제를 일반적으로 처리하는 가장 좋은 방법은 자연스럽게 문자열 열을 정렬하는 'IQueryable'구현을 제공하는 것입니다. 내가 알아낼 수 있다면 좀 더 자세히 설명 할 답변을 드리겠습니다. –

답변

0

지금은 Buildium.ComparedQueryable이라는 사전 출시 된 NuGet 패키지를 통해 가능합니다.

Install-Package Buildium.ComparedQueryable -Version 0.1.3 

것은 당신이 IQueryable 자연스럽게 정렬 된 컬렉션을 반환 그것에 AsNaturalQueryable 전화 메모리에 저장이 주어.

using ComparedQueryable; 

public IHttpActionResult Get() 
{ 
    IEnumerable<Widget> widgets = this.service.GetWidgets(); 
    return widgets.AsNaturalQueryable(); 
}