使用lambda表达式和Include方法排序查询

时间:2018-09-27 13:03:09

标签: entity-framework entity-framework-core

我正在研究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个表进行排序?

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
相关问题