Как получить результаты из нескольких таблиц с помощью LINQ

#c# #.net #linq #linq-to-sql #linq-to-entities

#c# #.net #linq #linq-to-sql #linq-to-entities

Вопрос:

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

Как я могу получить эту информацию с помощью LINQ.

У меня есть структура таблицы, как показано ниже,

Country Countryname PK countryName

State Stateid PK StateName Countryid FK

City Cityid PK CityName Stateid FK

Я хочу получить результат в текстовом поле автозаполнения.

Например, если пользователь напишет san, он получит список названий городов, содержащих san

например, в Сан-Франциско, Калифорния, Соединенные Штаты Америки.

Как я могу написать запрос LINQ, чтобы получить этот результат.

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

1. Это LINQ для SQL или LINQ для сущностей (Entity Framework)? Это не может быть и то, и другое.

Ответ №1:

 var query = from c in dataContext.City
            where c.Contains(keyword)
            select c.CityName   ", "   c.State.StateName  ", "  c.State.Country.CountryName;
  

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

1. @JohnSaunders как насчет сейчас, Джон?

Ответ №2:

Использование linq-to-sql:

 var q = from c in context.cities
select c.CityName   ", "   c.State.StateName   ", "   c.State.Country.CountryName
where CityName.StartsWith(typed);
  

Это даст IEnumerable с предложениями, которые соответствуют введенным символам.

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

1. Возможно, вы захотите попробовать профилировать разницу между помещением предложения where в конец и помещением его перед предложением select . С LINQ to Objects ваш синтаксис будет неоптимальным, но возможно, что поставщик LINQ и / или компонент database engine оптимизируют дополнительный подвыбор.

2. @Jim Wooley: Если это linq-to-sql, механизм DB позаботится об этом. Если это была linq-to-objects, порядок where и select имеет смысл.

Ответ №3:

Другой вариант:

 var matches = cities.Where(c => c.CityName.Contains(substr))
                    .Select(a => String.Format("{0} {1} {2}",
                                        a.CityName, 
                                        a.State.StateName, 
                                        a.State.Country.CountryName 
                           ));