LINQ TO 实体 OrderBy 难题
LINQ TO Entities OrderBy Conundrum
我无法理解如何在 LINQ to Entities 调用中对按所需顺序组织的 return 数据执行排序。使用的数据库是postgresql。 postgres 中的顺序是:
SELECT
*
FROM
part
ORDER BY
split_part(partnumber, '-',1)::int
, split_part(partnumber, '-',2)::int
Partnumber 是一个字符串字段,它被格式化为 2-3 段,由“-”分隔的数字。例如:
1-000235
10-100364
9-123456
etc.
我希望排序结果为 return:
1-000235
9-123456
10-100364
我有一个测试 VB.Net 应用我正在尝试弄清楚如何做到这一点:
Using ctx As New EFWeb.MaverickEntities
Dim myparts = ctx.parts.
OrderBy(Function(e) e.partnumber).
ToList()
For Each pt As part In myparts
Console.WriteLine("{0} - {1}", pt.partnumber, pt.description)
Next
End Using
我尝试这样做:CInt(e.partnumber.Split("-")(0))
以强制对部件号的第一段进行排序,但由于编译器不喜欢 Split() 调用结果的数组引用而出错。
如果有人知道 LINQ to Entities 的良好当前参考...将不胜感激。
您没有共享您的 Linq 代码。无论如何,我会将数据发送到客户端,然后进行订购。在 C# 中:
var result = ctx.Parts.AsEnumerable()
.Select(p => new {p, pnSplit = p.PartNumber.Split('-')})
.OrderBy(x => int.Parse(x.pnSplit[0]))
.ThenBy(x => int.Parse(x.pnSplit[1]))
.Select(x => x.p);
在VB中应该是:
Dim result = ctx.Parts.AsEnumerable()
Select(Function(p) New With {p, .pnSplit = p.PartNumber.Split("-"c)}).
OrderBy(Function(x) Integer.Parse(x.pnSplit(0))).
ThenBy(Function(x) Integer.Parse(x.pnSplit(1))).
Select(Function(x) x.p)
注意 integer.Parse。否则就是字母排序。
我无法理解如何在 LINQ to Entities 调用中对按所需顺序组织的 return 数据执行排序。使用的数据库是postgresql。 postgres 中的顺序是:
SELECT
*
FROM
part
ORDER BY
split_part(partnumber, '-',1)::int
, split_part(partnumber, '-',2)::int
Partnumber 是一个字符串字段,它被格式化为 2-3 段,由“-”分隔的数字。例如:
1-000235
10-100364
9-123456
etc.
我希望排序结果为 return:
1-000235
9-123456
10-100364
我有一个测试 VB.Net 应用我正在尝试弄清楚如何做到这一点:
Using ctx As New EFWeb.MaverickEntities
Dim myparts = ctx.parts.
OrderBy(Function(e) e.partnumber).
ToList()
For Each pt As part In myparts
Console.WriteLine("{0} - {1}", pt.partnumber, pt.description)
Next
End Using
我尝试这样做:CInt(e.partnumber.Split("-")(0))
以强制对部件号的第一段进行排序,但由于编译器不喜欢 Split() 调用结果的数组引用而出错。
如果有人知道 LINQ to Entities 的良好当前参考...将不胜感激。
您没有共享您的 Linq 代码。无论如何,我会将数据发送到客户端,然后进行订购。在 C# 中:
var result = ctx.Parts.AsEnumerable()
.Select(p => new {p, pnSplit = p.PartNumber.Split('-')})
.OrderBy(x => int.Parse(x.pnSplit[0]))
.ThenBy(x => int.Parse(x.pnSplit[1]))
.Select(x => x.p);
在VB中应该是:
Dim result = ctx.Parts.AsEnumerable()
Select(Function(p) New With {p, .pnSplit = p.PartNumber.Split("-"c)}).
OrderBy(Function(x) Integer.Parse(x.pnSplit(0))).
ThenBy(Function(x) Integer.Parse(x.pnSplit(1))).
Select(Function(x) x.p)
注意 integer.Parse。否则就是字母排序。