有关此问题的快速提问。
我有一个错误无法从数据库中获取数据,
EF Core或我的linq查询是否存在问题?
var query = _postRepository.Table
.Where(x => x.Approval == true)
.Include(p => p.Industry)
.GroupBy(grp => new { grp.Industry.Id, grp.Industry.Name })
.Select(s => new JobPostStatistics
{
IndustryId = s.Key.Id,
IndustryName = s.Key.Name,
TotalJobPost = s.Count()
});
return query.Take(6).ToList();
InvalidOperationException:Sequence包含多个元素
答案 0 :(得分:1)
似乎在EF RC1 GroupBy
导致错误,这里报告错误:
GroupBy
query cause error Sequence contains more than one element
答案 1 :(得分:0)
您可以使用include关键字启用预先加载。您尝试使用禁用延迟加载
答案 2 :(得分:0)
EF Core的服务器端GroupBy支持已推迟到发布后:https://github.com/aspnet/EntityFramework/issues/2341 当您记录EF创建的查询时,您可以看到它不会在SQL中创建GROUP BY。
此处其他人在另一个GroupBy查询中发布了相同的错误。 https://github.com/aspnet/EntityFramework/issues/4775
我在GroupBy和Include()中遇到了另一个错误。由于EF不支持SQL中的GroupBy,并且分组是在客户端完成的,因此我将查询拆分为服务器端部分和客户端部分。第一部分使用Include()从数据库查询到匿名类型。然后我在客户端进行分组。
var event2Country = DbContext.Event2Countries
.Include(j => j.Location)
.Select(j => new { j.Location.Id, j.Location.Name })
.AsNoTracking();
viewModel.MostUsedCountries = event2Country
.GroupBy(j => new { j.Id, j.Name })
.OrderByDescending(j => j.Count())
.ThenBy(j => j.Key.Id)
.Select(j => new SimpleListCountViewModel()
{
Id = j.Key.Id,
Name = j.Key.Name,
Count = j.Count()
})
.Take(15)
.ToList();
目前,如果您拥有大量数据,则无法在EF Core中使用GroupBy。解决方法是使用FromSql。请参阅Github上的问题4959。
答案 3 :(得分:0)