LINQ запрашивает связь «многие ко многим»

#linq #entity-framework #linq-to-sql #linq-to-entities #many-to-many

#linq #entity-framework #linq-to-sql #linq-to-entities #многие ко многим

Вопрос:

У меня есть ASP.NET приложение, которое взаимодействует с базой данных SQL, содержащей 4 таблицы:

  • Города
  • Состояния
  • Города-состояния (карты городов<=> Состояния)

  • Клиенты (в котором хранится идентификатор города, в котором они живут)

Мне нужно подсчитать, сколько клиентов живет в определенном состоянии. Я могу достичь этого с помощью следующего SQL-запроса:

 select count(*) from Customers where CityID in 
(
    select sc.CityID from StatesCities sc, States s 
    where sc.StateID = s.StateID AND s.Name = 'Texas'
)
  

Как я могу выразить эквивалент этого запроса в LINQ, используя EF или LINQ to SQL?

С помощью подхода EF я добился того, что:

var cities = db.Cities.Where(c => c.States.Any(s => s.Name == "Texas"));

но я не уверен, как выполнить сопоставление и подсчет идентификатора клиента / CityId.

Ответ №1:

Вы могли бы сделать что-то вроде этого:

 int CustomersCount=db.Customers.Count(c=>c.City.State.Name=="Texas");
  

или

 var cities = db.Cities.Where(c => c.States.Any(s => s.Name == "Texas"));
int customersCount=Customers.Count(d=>cities.Any(x=>d.CityID==x.CityID);
  

Ответ №2:

@ 216 вывел меня на правильный путь с первым предложением, но поскольку город может существовать более чем в одном штате, мне нужно было немного изменить инструкцию:

 int customersCount = db.Customers.Count(c => c.City.States.Any(s => s.Name == "Texas"));