Linq到left join导致“无法评估子节点”.错误
本文关键字:评估 子节点 错误 left join 导致 Linq | 更新日期: 2023-09-27 18:18:43
我试图在linQ中编写以下SQL查询:
select b.Title, b.Author from CurrentRented c left join Book b on c.BookId=b.BookId
where c.UserId=2
我的linQ是:
var BooksRented = from c in db.CurrentRenteds
join b in db.Books on c.BookId equals b.BookId into bk
from b in bk.DefaultIfEmpty()
where c.UserId.Equals(UserID)
select new {
b.Title, b.Author, c.RentDate, c.ReturnDate};
然而,当我在Visual Studio 2010中调试时,我得到了一个"无法评估儿童"的错误。知道为什么我得到这个错误吗?
扩展我的评论,这不是一个错误。你的查询看起来很好,但它一定是失败的,因为DefaultIfEmpty
返回类型的默认值,当没有行匹配,所以你需要处理:-
from b in bk.DefaultIfEmpty()
where c.UserId.Equals(UserID)
select new {
Title = b != null ? b.Title : "",
Author = b!= null ? b.Author : "",
RentDate = c.RentDate,
ReturnDate = c.ReturnDate
};
你必须在下面的DefaultIfEmpty Look中给出一个不同的别名。
var BooksRented = from c in db.CurrentRenteds
join b in db.Books on c.BookId equals b.BookId into bk
from d in bk.DefaultIfEmpty()
where c.UserId.Equals(UserID)
select new {
d.Title, d.Author, c.RentDate, c.ReturnDate};
我遇到过这个问题,当我在你的DbSet实体递归调用,包括不正确设计的属性。
简而言之,如果您使用实体框架作为ORM,请检查数据库中的外键和主键关系。因为有些表不工作,如果你有坏的键关系