Я пытаюсь вернуть набор результатов, который включает строки, в которых любая из трех строк имеет совпадение.Модели моего домена выглядят так:
public class Customers
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class BidNames
{
public int BidNameID { get; set; }
public int CustomerID { get; set; }
public string BidName { get; set; }
}
Между BidName.CustomerID и Customers.CustomerID существует FK, и это отношение «один ко многим», когда для одного Клиента может быть несколько BidNames.При поиске в моей таблице клиентов я хочу вернуть все записи, в которых есть совпадения строк в FirstName, LastName или любом из связанных BidNames.В этом примере я буду использовать строку поиска BidName "ba".
from c in Customers
where c.FirstName.Contains("ba") || c.LastName.Contains("ba") || c.BidNames.Any(b=>BidNames.BidName.Contains("ba"))
orderby c.LastName, c.FirstName
select new { CustomerID = c.CustomerID, FirstName = c.FirstName, LastName = c.LastName }
Все это работает, пока я не добавлю окончательные критерии в предложение Where.Я понимаю, что c.BidNames является коллекцией, и я смотрю, есть ли у кого-нибудь из них BidName, который содержит "ba".Там, где я сталкиваюсь с проблемами, я пытаюсь указать столбец BidNames.BidName для поиска строки.Код, который я написал выше, завершается ошибкой: «BidNames не содержит определения для« BidName »»
Как мне написать последнюю часть предложения Where, чтобы я мог искать все поля BidNames.BidName, связанные сзапись клиента?Я надеюсь и предполагаю, что смогу использовать тот же синтаксис для указания поля BidName в порядке заказа и выбора предложений.
Большое спасибо,
BK
ЗАКЛЮЧИТЕЛЬНЫЙ ОТВЕТ:
from c in Customers
where
c.FirstName.Contains("ba") ||
c.LastName.Contains("ba") ||
c.BidNames.Any(b=>b.BidName.Contains("ba"))
orderby
c.LastName,
c.FirstName
select new {
CustomerID = c.CustomerID,
FirstName = c.FirstName,
LastName = c.LastName,
BidNames = c.BidNames.OrderBy(b=>b.BidName)
}