Entity framework 如何在实体框架中进行左连接?

Entity framework 如何在实体框架中进行左连接?,entity-framework,join,Entity Framework,Join,我是实体框架的新手,对于包含连接的查询有一些问题。 以下是我使用的模型: 我想查询所有模型,使用给定配置文件的启用信息(我从实例信息中获得)。 作为第一步,我试图在所有模型存在时(左连接)获取启用信息,但失败了。我尝试了Join方法,但我甚至无法编译 var modelList = dc.db.models.Join(dc.db.profile_model, y => y.id, s => s.models.id,

我是实体框架的新手,对于包含连接的查询有一些问题。 以下是我使用的模型:

我想查询所有模型,使用给定配置文件的启用信息(我从实例信息中获得)。 作为第一步,我试图在所有模型存在时(左连接)获取启用信息,但失败了。我尝试了Join方法,但我甚至无法编译

var modelList = dc.db.models.Join(dc.db.profile_model,
                y => y.id,
                s => s.models.id,
                (y, s) => new Object( y.id, y.display, s.enabled, s.models, s.profiles )
                ))
关于这个函数的MSDN与intellisense给我的不一致,并且我在参数方面有问题。我认为前三个是可以的(第二个表和要连接的两个键),但我不能正确地得到最后一个。我应该如何获得一个包含模型和profile_模型的所有字段的对象

谢谢


更新:
更清楚地说,以下是用普通的好SQL编写的查询:

select m.*, p.enabled from models m
left join profile_model p on m.id = p.model_id
where p.profile_id = 
(
  select profile_id from instances where instances.display = 'PTXM11602' 
)
or profile_id is null

如何使用e-f编写?

如果我理解正确,您需要一个模型列表,其中包含每个模型的所有模型实例。当您正确设计模型并在数据库中拥有所有正确的引用键时,您应该能够编写如下内容:

var models =
    from model in db.models
    where (
        from pm in model.profile_models
        from instance in pm.profile.instances
        where instance.display == "PTXM11602").Any()
      ||
        !model.profile_models.Any()
    select model;

var results =
    from pm in db.profile_models
    where pm.profile.instances.Any(i => i.display == "PTXM11602")
    where models.Contains(pm.model)
    select new 
    {
        Model = pm.model,
        Enabled = pm.enabled
    };

请阅读以获取使用Entity Framework 3.5的
Contains
方法。

不完全正确。我需要所有模型的列表,如果存在这种关系,则需要通过配置文件与给定实例关联的信息。我不确定“通过配置文件与给定实例关联的信息”是什么意思。你能解释一下吗?模型与一个配置文件相关联(n到m关系)。对于每个关系,profile_model表中都存储了其他信息,如“enabled”(模型和profile之间存在关联,但可以打开/关闭,由“enabled”字段指示)。好的。。。那么,您希望查询的实际结果是什么:您喜欢哪些列?100%确定您可以用LINQ以一种简单的方式实现这一点,但仍然不确定我是否得到了它。我想要的结果是模型ID和显示,以及它所在的启用字段。