在 WCF 中自然排序 IQueryable 字符串
Naturally sort IQueryable strings in WCF
我有一个很好的方法来对数据 "naturally" 进行排序,其中 IComparer
类似于@ Natural Sort Order in C# 的答案。在我的例子中,我有一个 class 是这样的:
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 查询会return数据的顺序与上面相同,
http://www.example.com/Widget.svc/GetWidgets?$orderby=Name
虽然我实际上希望数据 "naturally" 如此排序:
[{Id: 1, Name: "2 N. Street"},{Id: 3, Name: "4 N. Street"},{Id: 2, Name: "33 N. Street"}]
是否有自定义 WCF 服务的好方法,使任何试图按任何字符串排序的查询 属性 对数据进行排序 "naturally"?
现在可以通过名为 Buildium.ComparedQueryable 的预发布 NuGet 包实现。
Install-Package Buildium.ComparedQueryable -Version 0.1.3
假设您有一个 IQueryable
存储在内存中,对其调用 AsNaturalQueryable
将 return 集合自然排序。
using ComparedQueryable;
public IHttpActionResult Get()
{
IEnumerable<Widget> widgets = this.service.GetWidgets();
return widgets.AsNaturalQueryable();
}
我有一个很好的方法来对数据 "naturally" 进行排序,其中 IComparer
类似于@ Natural Sort Order in C# 的答案。在我的例子中,我有一个 class 是这样的:
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 查询会return数据的顺序与上面相同,
http://www.example.com/Widget.svc/GetWidgets?$orderby=Name
虽然我实际上希望数据 "naturally" 如此排序:
[{Id: 1, Name: "2 N. Street"},{Id: 3, Name: "4 N. Street"},{Id: 2, Name: "33 N. Street"}]
是否有自定义 WCF 服务的好方法,使任何试图按任何字符串排序的查询 属性 对数据进行排序 "naturally"?
现在可以通过名为 Buildium.ComparedQueryable 的预发布 NuGet 包实现。
Install-Package Buildium.ComparedQueryable -Version 0.1.3
假设您有一个 IQueryable
存储在内存中,对其调用 AsNaturalQueryable
将 return 集合自然排序。
using ComparedQueryable;
public IHttpActionResult Get()
{
IEnumerable<Widget> widgets = this.service.GetWidgets();
return widgets.AsNaturalQueryable();
}