【发布时间】:2014-08-09 17:34:54
【问题描述】:
由于某种原因,下面的代码出现了这个错误:
EntityFramework.SqlServer.dll 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理
附加信息:LINQ to Entities 无法识别该方法 'System.Linq.IQueryable
1[DansBlog.Domain.BlogEntities.Post] Retrieve(System.Linq.Expressions.Expression1[System.Func`2[DansBlog.Domain.BlogEntities.Post,System.Boolean]])' 方法,并且该方法不能翻译成商店表达式。
代码:
var blogRepository = this.repositoryFactory.Create<Blog>(unitOfWork);
var userRepository = this.repositoryFactory.Create<User>(unitOfWork);
var postRepository = this.repositoryFactory.Create<Post>(unitOfWork);
var allResult = blogRepository.Retrieve().Join(
userRepository.Retrieve(),
b => b.UserId,
u => u.Id,
(blog, user) => new GUI.Models.Blogging.Blog()
{
Id = blog.Id,
Content = blog.Content,
Title = blog.Title,
DateAdded = blog.DateAdded,
User = new GUI.Models.Blogging.User()
{
UserId = user.Id,
FirstName = user.FirstName,
LastName = user.LastName,
Email = user.Email,
UserName = user.UserName
},
Posts = postRepository.Retrieve(p => p.BlogId.Equals(blog.Id)).Join(
userRepository.Retrieve(),
p => p.UserId,
u => u.Id,
(post, postUser) => new GUI.Models.Blogging.Post()
{
Content = post.Content,
DateAdded = post.DateAdded,
Id = post.Id,
User = new GUI.Models.Blogging.User()
{
UserId = postUser.Id,
UserName = postUser.UserName,
FirstName = postUser.FirstName,
LastName = postUser.LastName,
Email = postUser.Email
}})});
【问题讨论】:
-
表示无法将
Retrieve转换为有效的SQL。你必须想出一个可以转换的不同语句。 -
由于执行延迟,EF 试图在数据库端执行 Retrieve(),不知道怎么做。您是否尝试过将所有 Retrive() 调用的结果分配给变量并加入该变量?
-
老实说,这是我第一次看到 joins :) 所以还没有完全弄清楚。我将尝试下面的答案,因为我相信这就是您所描述的
标签: c# linq entity-framework