Linq-запрос, проблема с таблицей соединений - PullRequest
1 голос
/ 18 февраля 2011

Я хочу написать запрос, который представляет для каждого события (tbl_events) все объекты (tbl_objects), связанные с ним (тип отношения - M: N).

У меня проблема с таблицами, которые являются таблицами соединений (класс ассоциации), который содержит только внешние ключи двух таблиц, которые соединяются.

Например, 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);

1 Ответ

1 голос
/ 18 февраля 2011

Модель данных сущности не показывает таблицы, которые содержат только 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();
...