当我尝试"分组"不止一次,我收到异常错误。
为了隔离错误,我写了一小段代码来复制这个异常。除了不止一次使用group并使其工作之外,它并不打算实现任何实际操作。这是我的测试代码:
parent
我收到的第一条消息是警告:
private IQueryable<Inventory> InventoryMiddleWare1(DateTime start, DateTime end)
{
var query = _context.Inventory.Where(r => r.InventoryDate>= start && r.InventoryDate<= end)
.GroupBy(g => new {
LocationCode = g.LocationCode,
SKU= g.SKU,
InventoryDate= g.InventoryDate
})
.Select(g => new
{
LocationCode = g.Key.LocationCode,
SKU= g.Key.SKU,
InventoryDate= g.Key.InventoryDate,
Units= g.Max(r => r.Units)
})
.GroupBy(g => g.InventoryDate).Select(g=> new
{
InventoryDate= g.Key.Value,
Units2= g.Sum(r=>r.Units)
}).Select(r=> new Inventory()
{
InventoryDate= r.InventoryDate,
Units= r.Units2
});
return query;
}
然后它崩溃并抛出以下异常:
Application> warn: The LINQ expression 'Max()' could not be translated and will be evaluated locally.
任何线索?
答案 0 :(得分:1)
在遇到相同问题的同时找到了您的问题-我还没有找到根本原因,但是确实有一种解决方法...所以 不是 将其标记为“可接受的答案”!
似乎有些东西阻止您像这样 那样进一步{@ {1}}的链接(我在迁移工作在 的旧代码库时遇到了这个问题)>
我通过在第一个查询之后使用GroupBy
对列表执行查询来解决此问题。当然,这可能会对某些性能产生影响,但是我确实说这是一种解决方法!对于问题中的示例,我的解决方法是:
ToList()
我会在有空的时候尝试跟进,但是我怀疑这种情况正在发生,因为比我聪明的人发现,如果正确地构建查询,一个private IQueryable<Inventory> InventoryMiddleWare1(DateTime start, DateTime end)
{
var query = _context.Inventory.Where(r => r.InventoryDate>= start && r.InventoryDate<= end)
.GroupBy(g => new {
LocationCode = g.LocationCode,
SKU= g.SKU,
InventoryDate= g.InventoryDate
})
.Select(g => new
{
LocationCode = g.Key.LocationCode,
SKU= g.Key.SKU,
InventoryDate= g.Key.InventoryDate,
Units= g.Max(r => r.Units)
})
.ToList()
.GroupBy(g => g.InventoryDate).Select(g=> new
{
InventoryDate= g.Key.Value,
Units2= g.Sum(r=>r.Units)
}).Select(r=> new Inventory()
{
InventoryDate= r.InventoryDate,
Units= r.Units2
});
return query;
}
就足够了。如果抛出的异常是有道理的,那就太好了!
答案 1 :(得分:0)
当尝试在同一查询中使用多个GroupBy子句时,我得到了与Arturo相同的ArgumentException。在以下问题中描述的某种类似异常,应该在EF Core 3.0中修复: https://github.com/aspnet/EntityFrameworkCore/issues/12805
我尝试将项目更新为EF Core 3.0预览版,以查看是否解决了我的问题。但是,我还必须更新到.NET Core 3.0预览版,这会导致一些构建/运行问题,而我没有足够的时间来解决该问题。