首页 > 解决方案 > 具有多个表的 C# 谓词生成器

问题描述

我有 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 都是字符串类型

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

标签: c#predicatebuilder

解决方案


应该是:

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

推荐阅读