You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET EF中LINQ查询Join关联表时OrderBy排序不生效问题

VB.NET EF关联实体排序不生效问题

此前用C#实现过同类EF查询逻辑,迁移到VB.NET编写后,始终无法按照关联的MainJobInfo实体的Year、Job_Number字段完成排序。

现有查询代码

共尝试两种LINQ写法,其中查询语法写法因Join段类型不匹配报错,无法正常使用:

' 方法语法版本(排序不生效)
GetAllPhasedJobInfoesJoinedByDate_OrderedByJobNumber = DBSubs.asdbCtx.PhasedJobInfoes _
            .Include("MainJobInfo") _
            .Include("MainJobInfo.CompanyInfo") _
            .Where(Function(x) x.Delivery_Date = qryDate And Not x.IsDeleted) _
            .OrderBy(Function(x) x.MainJobInfo.Year) _
            .ThenBy(Function(x) x.MainJobInfo.Job_Number)

' 查询语法版本(Join报类型不匹配错误,已弃用)
GetAllPhasedJobInfoesJoinedByDate_OrderedByJobNumber = From x In DBSubs.asdbCtx.PhasedJobInfoes
                                                               Join j In DBSubs.asdbCtx.MainJobInfoes
                                                                   On j Equals x.MainJobInfo
                                                               Join c In DBSubs.asdbCtx.CompanyInfoes
                                                                   On c Equals x.MainJobInfo.CompanyInfo
                                                               Where x.Delivery_Date = qryDate And Not x.IsDeleted
                                                               Order By j.Year, j.Job_Number

查询调用流程

Me.Cursor = Cursors.WaitCursor

' 清空ListView控件原有内容

Try
    phasedJobInfoes = DBSubs.GetAllPhasedJobInfoesJoinedByDate_OrderedByJobNumber(jwvDate).ToList()
Catch ex As Exception
    ' 异常捕获处理逻辑
    Exit Sub
End Try

' 将查询结果填充至ListView控件
Me.Cursor = Cursors.Default

关联实体模型定义

[Table("PhasedJobInfo")]
public class PhasedJobInfo
{
    [Key]
    public int Id { get; set; }

    public MainJobInfo MainJobInfo { get; set; }
}

[Table("MainJobInfo")]
public class MainJobInfo
{
    public MainJobInfo()
    {
        PhasedJobInfoes = new HashSet<PhasedJobInfo>();
    }
    [Key]
    public int Id { get; set; }

    public int Year { get; set; }

    public int Job_Number { get; set; }

    public virtual ICollection<PhasedJobInfo> PhasedJobInfoes { get; set; }
}

[Table("CompanyInfo")]
public partial class CompanyInfo : AllianceScheduleDBObject
{
    public CompanyInfo()
    {
        MainJobInfoes = new HashSet<MainJobInfo>();
    }
    [Key]
    public int Id { get; set; }

    public string CompanyName { get; set; }

    public string StreetAddr { get; set; }

    public virtual ICollection<MainJobInfo> MainJobInfoes { get; set; }
}

已尝试的排查操作

  • 移除所有Include和Join逻辑,新增映射MainJobInfo排序字段的[NotMapped]属性,先完成排序再生成关联实体列表,排序依然不生效
  • 尝试直接对内存中的结果集调用Sort()方法,但原生Sort方法不支持便捷的双字段排序
  • 经Visual Studio调试确认,查询返回的结果集在后续填充控件的流程中,没有被其他代码逻辑重新排序

如果需要补充其他排查信息可随时说明。

内容的提问来源于stack exchange,提问作者Byrd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:24:21