LINQ to Entities中有多对多选择

fin*_*ook 5 .net c# linq-to-entities many-to-many entity-framework

我有两个表ServiceProvider.它们之间是一个连接表ServiceProvider,只有两个字段 - 两个PK中的每一个都有一个字段.当添加到edmx时,连接的多对多表被抽象掉并且无法看到(如预期的那样).

这很好,除非我想基于给定的服务获得提供者.从这个问题:

看起来答案很简单:

var query = from p in entities.Providers
            from s in entities.Services
            where s.Id == 15
            select p;
Run Code Online (Sandbox Code Playgroud)

但这将返回所有提供者.我在这做错了什么?

hal*_*lit 4

var query = entities.Providers.FirstOrDefault(p => p.Id == 15).Services.ToList();
Run Code Online (Sandbox Code Playgroud)

  • @finoutlook:正确的解决方案在 Maciej Dopieralski 的回答中。此答案中的代码将 1) 当没有 Id=15 的提供程序时崩溃,2) 如果您使用 POCO 并且未启用延迟加载,则会崩溃,3) 创建两个数据库查询而不是仅一个。罗林的答案也有同样的缺陷。 (2认同)