我想写一个嵌套查询。
我有3个对象:
public class Invoice
{
public int Id { get; set; }
public ICollection<InvoiceDet> Details { get; set; }
}
public class InvoiceDet
{
public int InvoiceId { get; set; }
public int Quantity { get; set; }
public int ArticleId { get; set; }
}
public class Article
{
public int Id { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
}
现在我想创建linq查询,如下所示,但它会抛出一个错误: &#34; Linq To Entities异常无法识别该方法,无法转换为商店表达式&#34;
var model = from i in db.Invoices
select new
{
Id = i.Id,
details = (from d in i.Details
from a in db.Articles.Where(a => a.Id == d.ArticleId)
select new
{
Id = a.Id,
Description = a.Description,
Total = a.Price * d.Quantity
}).Distinct().ToList()
};
任何帮助将不胜感激。非常感谢!
答案 0 :(得分:1)
LINQ to Entities,虽然类似于LINQ to Objects,却是一个完全不同的野兽。实体框架从您的查询构建表达式树,当您首次尝试枚举数据时,该表达式树将转换为SQL语句。不幸的是,Entity Framework有些东西不能/不能转换为SQL,其中一个是嵌套查询。它根本不是为了知道如何处理
而设计的details = (from d in i.Details.....
您需要重写您的查询,以便它没有像这样的嵌套查询。