【问题标题】:System.NotSupportedException This overload of the method 'System.Linq.Queryable.GroupBy' is currently not supported.'System.NotSupportedException 目前不支持“System.Linq.Queryable.GroupBy”方法的这种重载。
【发布时间】:2017-06-29 12:08:28
【问题描述】:
public partial class GoodsCode_EAN
{
    public string GoodsCode { get; set; }
    public string EAN { get; set; }
}

这是 GoodsCode 每次都是唯一但 EAN 不是的模型

var test = _context.GoodsCode_EAN
                        .FromSql($"SELECT * FROM dbo.fnGoodsCode_EAN({SavedData.Entities.id_cenoprov})")
                        .GroupBy(p => p.EAN, StringComparer.OrdinalIgnoreCase)
                        .ToDictionary(g => g.Key, g => g.ToList(), StringComparer.OrdinalIgnoreCase);

所以我只是尝试将具有相同 EAN 的每个元素分组到字典并得到这个异常......

System.NotSupportedException: '无法解析表达式 value(Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[ProfiKasa.Portal.Models.newModel.CisloZbozi_EAN]).FromSql("SELECT * FROM dbo.fnCisloZbozi_EAN(1)", __p_0).GroupBy(p => p.EAN, __p_1)':方法 'System.Linq.Queryable.GroupBy' 的重载是 目前不支持。'

当我删除 ToDictionary 时,一切正常... 有任何想法吗? 谢谢!

【问题讨论】:

  • 在 .ToDictionary() 之前添加 .ToArray() 并再次测试
  • 又出现同样的错误...
  • EF 理解StringComparer.OrdinalIgnoreCase 吗?我认为p.EAN.ToLower() 可能会有所帮助。
  • 是因为 GroupBy 中的 StringComparer.OrdinalIgnoreCase。见stackoverflow.com/questions/1047891/…

标签: c# .net entity-framework linq asp.net-core


【解决方案1】:

实体框架一开始就无法理解StringComparer 枚举。实际上,它不支持采用第二个参数 (IEqualityComparer<T>) 的 GroupBy 的整个重载。

您可以使用ToLower() 作为替代,因为它受支持并且可以翻译成SQL:

.GroupBy(p => p.EAN.ToLower())

【讨论】:

  • 谢谢!所以一个 - .FromSql($"SELECT * FROM dbo.fnGoodsCode_EAN({SavedData.Entities.id_cenoprov})") .GroupBy(p => p.EAN) .ToDictionary(g => g.Key, g => g.ToList());
  • 另一种解决方案是 - .FromSql($"SELECT * FROM dbo.fnGoodsCode_EAN({SavedData.Entities.id_cenoprov})") .ToLookup(l => l.EAN) .ToDictionary(p => p.Key, p => p.ToList(), StringComparer.OrdinalIgnoreCase);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2018-06-08
  • 2012-03-11
  • 1970-01-01
相关资源
最近更新 更多