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。否则就是字母排序。