LINQ查询多对多关系

时间:2014-07-01 15:00:45

标签: linq entity-framework linq-to-sql linq-to-entities many-to-many

我有一个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匹配和计数。

2 个答案:

答案 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"));