EF LINQ包括Take

时间:2015-03-26 17:42:55

标签: c# linq entity-framework include take

我想只从一个客户端获取来自数据库的3张发票。 下面的代码没有给我3个结果(但抛出异常)。

  

例外:   Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。参数名称:路径

有一个客户可以有多个发票,一个发票可以有多个InvoiceLines。

我想检索一个包含3个发票和相关InvoiceLines的客户。

我在这里做错了什么?

    public async Task<Client> Client(int id)
    {
        using (var db = GetContext())
        {                
                return await db.Client.Include(x => x.Invoices.Take(3))
                .Where(i => !i.IsDeleted)
                .Include(c => c.Invoices.Select(x => x.InvoiceLines))
                .Where(x => x.Id == id)
                .FirstOrDefaultAsync();              
        }
    }

1 个答案:

答案 0 :(得分:0)

我认为.Include不能用于过滤 out 记录。

我没有足够的代码来验证这是否符合您的要求,但我认为您可以在不使用.Include的情况下做您想做的事。

var client = await db.Client
    .Where(i => !i.IsDeleted)
    .FirstOrDefaultAsync(x => x.Id == id);

var top3Invoices = client.Invoices.Take(3);