C# 在WCF中对IQueryable字符串进行自然排序

C# 在WCF中对IQueryable字符串进行自然排序,c#,wcf,odata,natural-sort,C#,Wcf,Odata,Natural Sort,我有一个很好的方法,可以使用与答案类似的I比较程序对数据进行“自然”排序。在我的例子中,我有一个这样的类: public class Widget { public int Id { get; set; } public string Name { get; set; } } 如果我有一个如下的集合 [{Id: 1, Name: "2 N. Street"},{Id: 2, Name: "33 N. Street"},{Id: 3, Name: "4 N. Street"}]

我有一个很好的方法,可以使用与答案类似的
I比较程序对数据进行“自然”排序。在我的例子中,我有一个这样的类:

public class Widget
{
    public int Id { get; set; }
    public string Name { get; set; }
}
如果我有一个如下的集合

[{Id: 1, Name: "2 N. Street"},{Id: 2, Name: "33 N. Street"},{Id: 3, Name: "4 N. Street"}]
使用像下面这样的OData查询将以与上面相同的顺序返回数据

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服务的好方法来进行任何试图按任何字符串属性排序以“自然”排序数据的查询?

现在可以通过一个名为

如果内存中存储了一个
IQueryable
,对其调用
AsNaturalQueryable
将返回自然排序的集合

using ComparedQueryable;

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

我发现通常处理这个问题的最好方法是提供一个
IQueryable
的实现,它可以自然地对字符串列进行排序。如果我能找到答案,我会提供一个更详细的答案。
using ComparedQueryable;

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