C# 无法在EF中排序子对象
我有一个linq查询,在针对内存中的数据执行时可以正常工作,但在使用EF时不能正常工作 首先,这里是我的查询说明,我已将查询更改为仅对单个值justOneDcn而不是整个context.RepairDocuments进行操作,以便生成的SQL更易于读取: var justOneDcn=context.RepairDocuments.Whered=>d.Dcn=00001; var q=来自justOneDcn中的dcn 让orderedHistory=dcn.History.OrderByh=>h.Date 让xdaHistoryPoint=orderedHistory.FirstOrDefaulth=>h.Status==DocumentStatus.Xda 选择故事点; 我删除了不必要的额外代码。问题是EF正在生成以下SQL: 选择 […col list…] 当[Element1].[id]不为空时,则[Element1].[date]ELSE@p__linq__0结束为[C2] 从中选择[Extent1].[id]作为[id] 从[dbo].[repair_document]开始,作为[Extent1] 其中N'00001'=[Extent1].[dcn]作为[Filter1] 外部应用选择顶部1 […col list…] 从[dbo]。[repair_document_history]作为[Extent2] 其中[Filter1].[id]=[Extent2].[repair_document_id]和4=将[Extent2].[status]转换为int,将[Extent2].[status]转换为int作为[Element1]不为NULL -p__linq__0:'1/1/0001 12:00:00 AM'类型=日期时间2 但是上面的SQL返回了错误的数据,它应该在where子句之后添加ORDER BY[Extent2].date。以下修改后的SQL为我提供了正确的结果: 选择 […col list…] 当[Element1].[id]不为空时,则[Element1].[date]ELSE@p__linq__0结束为[C2] 从中选择[Extent1].[id]作为[id] 从[dbo].[repair_document]开始,作为[Extent1] 其中N'00001'=[Extent1].[dcn]作为[Filter1] 外部应用选择顶部1 […col list…] 从[dbo]。[repair_document_history]作为[Extent2] 其中[Filter1].[id]=[Extent2].[repair\u document\u id]和4=将[Extent2].[status]转换为int,将[Extent2].[status]转换为int不为NULL 由[Extent2]订购。日期为[Element1] -p__linq__0:'1/1/0001 12:00:00 AM'类型=日期时间2 请注意末尾的顺序 这快把我逼疯了!我做错了什么?另外,将数据加载到内存不是一个选项,我有大约5000个dcn,每个dcn的历史记录表中有10-15条记录 谢谢 编辑: 这是实体声明C# 无法在EF中排序子对象,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个linq查询,在针对内存中的数据执行时可以正常工作,但在使用EF时不能正常工作 首先,这里是我的查询说明,我已将查询更改为仅对单个值justOneDcn而不是整个context.RepairDocuments进行操作,以便生成的SQL更易于读取: var justOneDcn=context.RepairDocuments.Whered=>d.Dcn=00001; var q=来自justOneDcn中的dcn 让orderedHistory=dcn.History.OrderByh=>
public class RepairDocument {
/* .... */
public virtual ICollection<RepairDocumentHistory> History { get; set; }
}
如果您改为使用:
var justOneDcn = context.RepairDocuments.Where(d => d.Dcn = "00001").OrderBy(d => d.History.Date);
并从下面的命令中删除了OrderBy。您能这样做吗:
var item =
(from r in context.RepairDocuments
from h in r.History
where r.Dcn == "00001" && h.Status == DocumentStatus.Xda
orderby h.Date
select h).FirstOrDefault();
那不会编译。历史记录是维修文档的子集合,可以像contex.repairdocumes.includehistory那样包含历史记录,然后通过Corry用户1718673尝试订购,您完全正确。如果选择子表历史记录作为主实体,然后包含父实体,会怎么样?然后,您可以轻松地按所选的主要实体进行订购。