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

时间:2017-04-22 22:34:04

标签: c# wcf odata natural-sort

我有一种很好的方法可以“自然地”对数据进行排序,IComparer类似于@ Natural Sort Order in C#的答案。就我而言,我有一个类似这样的课程:

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服务,使任何尝试按任何字符串属性排序的查询“自然地”对数据进行排序吗?

1 个答案:

答案 0 :(得分: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();
}