【问题标题】:Include Entity only return one row包含实体只返回一行
【发布时间】:2021-03-31 20:20:49
【问题描述】:

我有发票类和共享单元类

public partial class InvoiceAll
    {
        ...
        public int? status_invoice { get; set; }

        public virtual List<HistoryShareUnit> HistoryShareUnit { get; set; }
    }

public partial class HistoryShareUnit
    {
        ...
        public int history_approval { get; set; }


        [ForeignKey("Invoice")]
        
        public virtual InvoiceAll InvoiceAll { get; set; }
    }

我在存储库中使用包含:

 public async Task<IList<InvoiceAll>> FindLimit(int limit, string cari)
        {
            IQueryable<InvoiceAll> invoice = from s in _db.Invoices select s;

            //untuk pencarian
            if (!String.IsNullOrEmpty(cari))
            {
                invoice = invoice.Where(s => s.Nama_Pembeli.Contains(cari))
                    .Include(c => c.HistoryShareUnit)
                    .Where(c => c.HistoryShareUnit.Any(i => i.Invoice == c.Invoice));
            }

            //untuk limit
            if (limit > 0)
            {
                invoice = invoice.Take(limit);
            }
            return await invoice.AsNoTracking().ToListAsync();
        }

但结果总是以 Share Unit 类中的 1 行结束

[
  {
    "invoice": "JKTNPP20120003",
    "historyShareUnit": [
      {
        "invoice": "JKTNPP20120003",
        "invoiceAll": {
          "invoice": "JKTNPP20120003",
          "historyShareUnit": []
        }
      }
    ]
  }
]

表之间的连接是正确的。因为共享单元类发票与发票类相同。

但是为什么他们只返回 1 个结果,而在 db 中发票有 3 个共享单元?

谁能赐教。我是 Entity 的新手。

【问题讨论】:

    标签: asp.net entity-framework linq


    【解决方案1】:

    invoice = invoice.Take(limit)

    此行限制您查询的行数。如果limit参数等于1,则查询将只返回与谓词匹配的第一项。

    【讨论】:

    • 过滤发票输出,不共享​​单位输出。当我尝试它时,我通常选择 3 或 5。所以从不选择 1。
    猜你喜欢
    • 2020-10-01
    • 2021-07-29
    • 2014-02-19
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多