C# EF LINQ包含与Take

C# EF LINQ包含与Take,c#,linq,entity-framework,include,take,C#,Linq,Entity Framework,Include,Take,我只想从DB获得1个客户和3张发票。 下面的代码没有给出3个结果,但抛出了一个异常 例外情况: 包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择运算符作为集合导航属性。参数名称:路径 一个客户端可以有多个发票,一个发票可以有多个发票行 我想检索一个具有3个发票和关联发票行的客户机 我做错了什么 public async Task<Client> Client(int id) { using (var db = GetCo

我只想从DB获得1个客户和3张发票。 下面的代码没有给出3个结果,但抛出了一个异常

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

一个客户端可以有多个发票,一个发票可以有多个发票行

我想检索一个具有3个发票和关联发票行的客户机

我做错了什么

    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();              
        }
    }
我不认为。Include可以用来过滤记录

我没有足够的代码来验证它是否符合您的要求,但我认为您可以不使用.Include来实现您的要求


我已经编辑了我的第一篇文章,这不是我真正的意思。现在您可以看到method.Hm的返回类型。如果一个客户有3张以上的发票,那么我认为你不能让EF表现得像它的发票一样少。Where子句/Take,基本思想是一样的。对不起,我不认为这是相同的想法威尔,要点是你不能限制包含。使用部分加载的集合加载实体是一件麻烦事。
var client = await db.Client
    .Where(i => !i.IsDeleted)
    .FirstOrDefaultAsync(x => x.Id == id);

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