#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"));