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
相关产品推荐
相关产品推荐

