LINQ to SQL - Поиск столбца объединенной таблицы - PullRequest
1 голос
/ 07 октября 2011

Я пытаюсь вернуть набор результатов, который включает строки, в которых любая из трех строк имеет совпадение.Модели моего домена выглядят так:

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)
    }

1 Ответ

1 голос
/ 07 октября 2011

Попробуйте изменить предложение where на

Where c.FirstName.Contains("ba") || 
      c.LastName.Contains("ba") || 
      c.BidNames.Any(b=>b.BidName.Contains("ba"))

В вашем предложении Any, b является экземпляром класса BidNames, поэтому вы хотите получить доступ к его свойствам, а не к свойству BidNames клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...