Конструктор предикатов C # с несколькими таблицами

#c# #predicatebuilder

#c# #predicatebuilder

Вопрос:

У меня есть 2 таблицы, Receipts которые содержат столбцы типа Id , InvoiceId и т.д. и Invoices , которые содержат Id , InvoiceNo , RevisionNo . Квитанция может содержать несколько счетов. Итак, на моей странице со списком поступлений есть столбец с именем, InvoiceSet который будет отображать список ( InvoiceNo RevisionNo ) через запятую

Например : 2000155 A, 200111 B

в одном столбце. У меня есть поле поиска в верхней части страницы моего списка, где пользователь может выполнять поиск по всему списку, используя ключевые слова. Для этой цели я использую predicatebuilder. Таким образом, когда пользователь выполняет поиск 200111 B, список должен фильтроваться и показывать строку с заданным ключом поиска. Поскольку указанный ключ поиска представляет собой комбинацию InvoiceNo и RevisionNo (200111 = invoiceno, B = RevisionNo) из таблицы Invoice, я не могу создать предикат, который может объединять два столбца с помощью predicatebuilder.

Я пробовал вот так :

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

но это выдает мне ошибку с указанием

Не удается преобразовать лямбда-выражение в предполагаемый тип делегата, поскольку некоторые из возвращаемых типов в блоке неявно преобразуются в возвращаемый тип делегата

Как InvoiceNo, так и RevisinNo имеют тип string

Возможно ли с помощью predicatebuilder достичь того, что я ищу?

Комментарии:

1. лямбда-выражение в Any должно возвращать логическое значение. a.Invoice.InvoiceNo " " a.Invoice.RevisionNo это не логическое значение, это строка, отсюда и ваша ошибка

2. Я не могу избавиться от ощущения, что этот вопрос содержит ужасно много лишней информации. Мне пришлось прочитать много текста, чтобы добраться до вашей фактической ошибки.

3. @Liam Извините за столь длинную информацию. искал правильное взаимодействие. ответ есть, я его протестировал, и он работает.

Ответ №1:

Должно ли это быть:

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

Комментарии:

1. ты рок-звезда… примет это как ответ через 5 минут