Linq:字段内的查询

时间:2014-11-18 22:24:51

标签: c# linq entity-framework

我想写一个嵌套查询。

我有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()
           };

任何帮助将不胜感激。非常感谢!

1 个答案:

答案 0 :(得分:1)

LINQ to Entities,虽然类似于LINQ to Objects,却是一个完全不同的野兽。实体框架从您的查询构建表达式树,当您首次尝试枚举数据时,该表达式树将转换为SQL语句。不幸的是,Entity Framework有些东西不能/不能转换为SQL,其中一个是嵌套查询。它根本不是为了知道如何处理

而设计的
details = (from d in i.Details.....

您需要重写您的查询,以便它没有像这样的嵌套查询。