Linq查询,连接表问题

问题描述 投票:1回答:1

我想写一个查询,为每个事件(tbl_events)提供与之相关的所有对象(tbl_objects)(关系类型 - M:N)。

我的表是连接表(关联类)的问题,它只保存连接的2个表的外键。

例如,tbl_events与名为tbl_object_has_tbl_events的连接表连接到tbl_objects

这是连接表的结构:

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_object_has_tbl_events

我的问题是当我有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);
linq foreign-keys many-to-many relational-database erd
1个回答
1
投票

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

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

IList dataList = (from dEvent in App.glidusContext.tbl_events
                  from dObject in dEvent.Objects
                    select new { dEvent.eventName, dObject.objectName}).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.