【问题标题】:C# Predicate builder with multiple Tables具有多个表的 C# 谓词生成器
【发布时间】:2019-03-22 21:59:49
【问题描述】:

我有 2 个表,Receipts,其中包含 Id、InvoiceId 等列和 Invoices,其中包含 Id、InvoiceNo、RevisionNo。一个收据可以有多个发票。因此,在我的收据列表页面中有一个名为 InvoiceSet 的列,它将以逗号分隔的方式显示 (InvoiceNo + RevisionNo) 的列表

例如:2000155 A, 200111 B

在单个列中。我的列表页面顶部有一个搜索字段,用户可以使用关键字搜索整个列表。为此,我正在使用谓词生成器。因此,当用户搜索 200111 B 时,列表应该过滤并显示具有给定搜索键的行。由于给定的搜索键是 Invoice 表中 invoiceNo 和 RevisionNo (200111 = invoiceno, B = RevisionNo) 的组合,因此我无法使用 predicatebuilder 构建可以组合两列的谓词。

我试过这样:

p.Receipts.Any(a =>  a.Invoice.InvoiceNo + " " + a.Invoice.RevisionNo).Contains(criteria.Search.Value)

但它给了我错误说明

无法将 lambda 表达式转换为预期的委托类型,因为 块中的某些返回类型不可隐式转换 到委托返回类型

InvoiceNo 和 RevisinNo 都是字符串类型

谓词构建器是否可以实现我正在寻找的东西?

【问题讨论】:

  • Any 中的 lambda 应该返回一个布尔值。 a.Invoice.InvoiceNo + " " + a.Invoice.RevisionNo 不是布尔值,而是字符串,因此您的错误
  • 我不禁觉得这个问题包含了大量的多余信息。我必须阅读大量文字才能找到您的实际错误。
  • @Liam 抱歉,信息太长了。正在寻找适当的沟通。答案就在那里,我已经测试过了,它正在工作。

标签: c# predicatebuilder


【解决方案1】:

应该是:

p.Receipts.Any(a => (a.Invoice.InvoiceNo + " " + a.Invoice.RevisionNo).Contains(criteria.Search.Value))

【讨论】:

  • 你是摇滚明星...将在 5 分钟后接受这个答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 2011-05-29
  • 1970-01-01
相关资源
最近更新 更多