我正在研究Entity-Framework-Core 2.0查询。该查询需要按“订单”字段对2个表进行排序。到目前为止,这就是我所拥有的:
return await _context.FieldsetGroup
.Include(e => e.Fieldsets.OrderBy(o => o.Order))
.ThenInclude(e => e.FieldsetFields.OrderBy(o => o.Field.Order))
.ThenInclude(e => e.Field)
.FirstOrDefaultAsync(fsg => fsg.FieldsetGroupId == fieldSetGroupId);
此查询返回异常: “属性表达式'e => {来自e.Fieldsets orderby [o] .Order asc select [o]}中的Fieldset o”。该表达式应表示属性访问:'t => t.MyProperty'。有关包括相关数据的更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=746393。”
如何对2个表进行排序?
答案 0 :(得分:0)
您无法在OrderBy
方法内进行排序(Include
)。查询后对数据进行排序。
答案 1 :(得分:0)
数据库查询的较慢部分之一是将所选数据从DBMS传输到本地进程。因此,限制传输的数据量是明智的。
您的FieldSetGroup
显然有零个或多个FieldSets
。每个FieldSet
恰好属于一个FieldsetGroup
。这由外键FieldSetGroupId
标识。此字段的值等于Id
的{{1}}。
因此,如果您的FieldSetGroup
的ID = 10,而这个FieldSetGroup
的数字为1000 FieldSetGroup
,则每个FieldSets
的值将为外键{{1 }}(共10个)。无需将该值传输1000次。
建议:要限制传输的数据量,避免传输过多的数据,请使用
FieldSet
而不是FieldSetGroupId
并仅选择您实际计划的数据 采用。如果您打算更新提取的数据,请使用Select
。
如果您使用Include
,则可以订购所需的任何东西:
Include