【发布时间】:2017-12-27 00:53:51
【问题描述】:
我在 EF 中有这个查询:
var data = db.Inventario.Where(i => i.ClienteId.Equals(Global.ClienteID))
.GroupBy(i => new { Tipo = i.Tipo.TipoNombre, Zona = i.Localidad.Zona.ZonaNombre, Localidad = i.Localidad.LocalidadNombre })
.Select(i => new Registro()
{
Tipo = i.Key.Tipo,
Zona = i.Key.Zona,
Localidad = i.Key.Localidad,
Estados = i.SelectMany(ei => ei.EstadoInventario)
.GroupBy(ei => ei.Estado.EstadoNombre)
.AsEnumerable()
.ToDictionary(ei => ei.Key, ei => ei.Sum(item => item.EstadoInventarioValor ? 1 : 0))
});
this.Data = data.ToList();
当我运行它时,会出现这个错误:
LINQ to Entities 无法识别该方法 'System.Collections.Generic.Dictionay`2[System.String,System.Int32] ToDictionary[IGrouping`2,String,Int32](System.Collections.Generic.IEnumerable`1[System.Linq.IGrouping`2[System.String,Data.EstadoInventario]], System.Func`2[System.Linq.IGrouping`2
Registro 类的 Estados 属性是一个 Dictionary,我需要在其中存储一个键为 EstadoNombre 的字典,其中包含查询结果中记录总和的值。
【问题讨论】:
-
在
ToDictionary之前放置一个AsEnumerable()以首先从服务器拉取结果。 -
它没有用。我已经更新了这个问题。 data.ToList() 指令出错
-
抱歉,我没有注意到您在
Select中包含ToDictionary- 将ToEnumerable移到Select之前。这可能会对性能产生影响。请注意,调用GroupBy后跟ToDictionary可能不是最有效的做法。根据服务器性能,我会将AsEnumerable放在第一个GroupBy之前,以将服务器查询减少到一个。
标签: c# entity-framework linq dictionary