我有一个ASP.NET应用程序,它与包含4个表的SQL数据库进行通信:
StatesCities(映射城市< =>状态)
客户(存储他们所居住城市的ID)
我需要了解有多少客户住在某个特定州。我可以使用以下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'
)
如何使用EF或LINQ to SQL在LINQ中表达此查询的等效项?
通过EF方法,我已经做到了:
var cities = db.Cities.Where(c => c.States.Any(s => s.Name == "Texas"));
但我不确定如何进行客户/城市ID匹配和计数。
答案 0 :(得分: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);
答案 1 :(得分:0)
@ 216让我在第一个建议的正确轨道上,但因为一个城市可以存在于多个州,我需要稍微调整一下这个陈述:
int customersCount = db.Customers.Count(c => c.City.States.Any(s => s.Name == "Texas"));