Linq查询,一个连接表问题

Linq查询,一个连接表问题,linq,foreign-keys,many-to-many,relational-database,erd,Linq,Foreign Keys,Many To Many,Relational Database,Erd,我想编写一个查询,为每个事件(tbl\u events)显示与其相关的所有对象(tbl\u objects)(关系类型-M:N) 我对连接表(关联类)的表有一个问题,该表只保存连接的两个表的外键 例如,tbl\u事件通过名为tbl\u对象的连接表连接到tbl\u对象 以下是连接表的结构: tbl events has: eventID, eventName tbl_object has: objectID, objectName tbl_object_has_tbl_events: even

我想编写一个查询,为每个事件(
tbl\u events
)显示与其相关的所有对象(
tbl\u objects
)(关系类型-M:N)

我对连接表(关联类)的表有一个问题,该表只保存连接的两个表的外键

例如,
tbl\u事件
通过名为
tbl\u对象的连接表连接到
tbl\u对象

以下是连接表的结构:

tbl events has: eventID, eventName

tbl_object has: objectID, objectName

tbl_object_has_tbl_events: eventID, objectID
以下是我试图写的:

IList dataList = (from dEvent in App.glidusContext.tbl_events.
                    join dObject in App.glidusContext.tbl_objects
                    on dEvent.tbl_objects equals dObject.objectID
                    select new { dEvent.eventName, dObject.objectName}).ToList();
我无法访问连接表
tbl\u对象\u有\u tbl\u事件

我的问题是,当我有一个M:N关系时,如何实现这样的查询

谢谢

更新生成多对多关系:

-- -----------------------------------------------------
-- Table tbl_events
-- -----------------------------------------------------
CREATE TABLE tbl_events (
    eventID INT NOT NULL IDENTITY,
    eventName NVARCHAR(100) NOT NULL,
    PRIMARY KEY (eventID));

-- -----------------------------------------------------
-- Table tbl_objects
-- -----------------------------------------------------
CREATE TABLE tbl_objects (
    objectID INT NOT NULL IDENTITY,
    objectName NVARCHAR(100) NOT NULL,
    PRIMARY KEY (objectID));

-- -----------------------------------------------------
-- Table tbl_objects_has_tbl_events
-- -----------------------------------------------------
CREATE TABLE tbl_objects_has_tbl_events (
    objectID INT NOT NULL,
    eventID INT NOT NULL,
    PRIMARY KEY (objectID, eventID),
    CONSTRAINT fk_tbl_objects_has_tbl_events_tbl_objects
        FOREIGN KEY (objectID)
            REFERENCES tbl_objects (objectID)
                ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT fk_tbl_objects_has_tbl_events_tbl_events
        FOREIGN KEY (eventID)
            REFERENCES tbl_events (eventID)
                ON DELETE CASCADE ON UPDATE CASCADE);

实体数据模型不显示仅包含FK的表。因此,在您的情况下,事件实体将具有导航属性Objects,而对象实体将具有导航属性Events

因此,要获取您的信息,您可以编写如下查询:

IList dataList = (from dEvent in App.glidusContext.tbl_events
                  from dObject in dEvent.Objects
                    select new { dEvent.eventName, dObject.objectName}).ToList();

实体数据模型不显示仅包含FK的表。因此,在您的情况下,事件实体将具有导航属性Objects,而对象实体将具有导航属性Events

因此,要获取您的信息,您可以编写如下查询:

IList dataList = (from dEvent in App.glidusContext.tbl_events
                  from dObject in dEvent.Objects
                    select new { dEvent.eventName, dObject.objectName}).ToList();

您的意思是表
tbl\u对象\u有\u tbl\u事件
没有显示在
App.glidusContext
对象中?是的。当我在VS2010中键入«App.glidusContext。»时,我看不到IntelliSense中的«tbl_object_has_tbl_events»,只有基本表,如tbl_worker、tbl_objects、tbl_events等。这种行为的原因是什么?在SQL Server Management Studio 2008 R2中,我可以看到所有连接表。您是否已在Visual Studio中的
.dbml
文件中添加了所有相关表?甚至是链接表?实际上,我根本没有DBML文件。我使用的是ADO.Net实体框架,取而代之的是EDMX文件。生成EDMX文件时,我选择了所有表,包括连接表。我宣布多对多关系的方式可能有问题吗?为了创建多对多关系,我做了:请参阅更新后。您的意思是表
tbl\u对象\u有\u tbl\u事件
没有显示在
App.glidusContext
对象中?是的。当我在VS2010中键入«App.glidusContext。»时,我看不到IntelliSense中的«tbl_object_has_tbl_events»,只有基本表,如tbl_worker、tbl_objects、tbl_events等。这种行为的原因是什么?在SQL Server Management Studio 2008 R2中,我可以看到所有连接表。您是否已在Visual Studio中的
.dbml
文件中添加了所有相关表?甚至是链接表?实际上,我根本没有DBML文件。我使用的是ADO.Net实体框架,取而代之的是EDMX文件。生成EDMX文件时,我选择了所有表,包括连接表。我宣布多对多关系的方式可能有问题吗?为了创建多对多关系,我做了:参见更新后。