我想写一个查询,为每个事件(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);
实体数据模型不显示仅包含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();