小编TWD*_*uke的帖子

EF中的LINQ查询 - 多对多和交叉连接

我想用LINQ处理的简单存储过程:

SELECT 
CASE  WHEN mg.MovieID IS NULL THEN 0 else 1 end as Selected ,
g.genreID, g.GenreName
FROM dbo.Genres g LEFT JOIN 
(
    SELECT MovieID, GenreID FROM [dbo].[MovieGenre] m 
    WHERE m.MovieID = @Movie
) MG 
ON g.[GenreID]  = mg.[GenreID]
ORDER BY g.GenreName
Run Code Online (Sandbox Code Playgroud)

我认为这应该很简单,我认为这是一个常见的要求,但我无法弄清楚,也没有通过搜索网络找到解决方案.

该应用程序是由EF模型支持的WPF.由于EF隐藏了连接表,我需要LINQ语法来处理缺少中间表的问题.

带有简单连接表的经典多对多:表1:电影,表2:流派,联接表:MovieGenres.在UI中,用户选择特定的电影.对于那部电影,我想带回所有类型和一个bool值,表明该类型是否已分配给电影.在LINQ中尝试这个的几个小时都没有让我失望,因此解决方案目前是让上面的存储过程为我生成值.我不会总是使用存储过程来执行此操作,并且很乐意看到LINQ解决方案.

这是实际的SQL表结构

CREATE TABLE [dbo].[Genres](
    [GenreID] [int] IDENTITY(1,1) NOT NULL,
    [GenreName] [nvarchar](15) NOT NULL,
 CONSTRAINT [PK_Genres] PRIMARY KEY CLUSTERED 
(
    [GenreID] ASC
)) ON [PRIMARY]

GO  

CREATE TABLE [dbo].[Movies](
    [MovieID] [int] IDENTITY(1,1) NOT NULL,
    [MovieTitle] [nvarchar](50) …
Run Code Online (Sandbox Code Playgroud)

linq linq-to-entities many-to-many entity-framework

5
推荐指数
1
解决办法
1302
查看次数