我正在(自己)从事某种教育项目,以学习EF Core->代码优先方法,而我正在努力解决查询的问题。 A有两个简单的实体:文章和用户,我想将它们分组以获得包含所有具有相关文章的用户列表的对象列表。
{
var authorRowModels =
from articles in _myContext.Articles
join authors in _myContext.Users on articles.Author.Id equals authors.Id
group new { articles, authors } by authors into authorWithArticles
select new
{
AuthorFirstName = authorWithArticles.Key.FirstName,
AuthorLastName = authorWithArticles.Key.LastName,
Articles = authorWithArticles.Select(x => x.articles)
};
return View(authorRowModels.AsEnumerable().Select(x => new AuthorRowModel
{
AuthorFirstName = x.AuthorFirstName,
AuthorLastName = x.AuthorLastName,
Articles = x.Articles.ToList()
}));
}
但我遇到错误:
InvalidOperationException:LINQ表达式'DbSet .LeftJoin(外部:DbSet,内部:a => EF.Property
(a,“ AuthorId”),externalKeySelector:u0 => EF.Property (u0, “ Id”),innerKeySelector:(o,i)=> new TransparentIdentifier (Outer = o,Inner = i))。Join(outer:DbSet,inner:a => a.Inner.Id,externalKeySelector :u => u.Id,innerKeySelector:(a,u)=>新的TransparentIdentifier ,User>(Outer = a,Inner = u)).GroupBy(来源:ti => ti.Inner ,keySelector:ti => new {文章= ti.Outer.Outer,authors = ti.Inner})'无法翻译。以一种可以翻译的形式重写查询,或者通过插入对AsEnumerable(),AsAsyncEnumerable(),ToList()或ToListAsync()的调用来显式切换到客户端评估。有关更多信息,请参见https://go.microsoft.com/fwlink/?linkid=2101038。
,我不知道什么英孚无法翻译。另外,如果您有关于如何以更好的方式重写此查询的提示,即使不进行分组也很好:)
谢谢。
答案 0 :(得分:1)
在EF LINQ中使用When proxy in package.json is an object, each context object must have a target property specified as a url string
几乎总是错误的解决方案。
使用Navigation属性,可以简单地是这样:
target