gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:13:41 25 4
gpt4 key购买 nike

我想用 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

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

该应用程序位于由 EF 模型支持的 WPF 中。由于 EF 隐藏了连接表,我需要可以处理缺少中间表的 LINQ 语法。

带有简单连接表的经典多对多:表 1:电影,表 2:流派,连接表:电影流派。在 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) NOT NULL,
CONSTRAINT [PK_Movies] PRIMARY KEY CLUSTERED
(
[MovieID] ASC
))
ON [PRIMARY]
GO

CREATE TABLE [dbo].[MovieGenre](
[MovieID] [int] NOT NULL,
[GenreID] [int] NOT NULL,
CONSTRAINT [PK_MovieGenre] PRIMARY KEY CLUSTERED
(
[MovieID] ASC,
[GenreID] ASC
)) ON [PRIMARY]
GO

ALTER TABLE [dbo].[MovieGenre] WITH CHECK ADD CONSTRAINT [FK_Genres] FOREIGN KEY([GenreID])
REFERENCES [dbo].[Genres] ([GenreID])
GO
ALTER TABLE [dbo].[MovieGenre] CHECK CONSTRAINT [FK_Genres]
GO
ALTER TABLE [dbo].[MovieGenre] WITH CHECK ADD CONSTRAINT [FK_Movies] FOREIGN KEY([MovieID])
REFERENCES [dbo].[Movies] ([MovieID])
GO
ALTER TABLE [dbo].[MovieGenre] CHECK CONSTRAINT [FK_Movies]
GO

最佳答案

这应该可以解决问题。

  • 使用 fromin带有 join 的导航属性
  • DefaultIfEmpty使其成为左连接
  • 使用三元运算符 ? :案例陈述

  • 询问:
    var query = from g in context.Genres
    from m in g.Movies.Where(x => x.MovieID == movieId)
    .DefaultIfEmpty()
    orderby g.GenreName
    select new {
    Selected = m == null ? 0 : 1,
    g.genreID,
    g.GenreName
    };

    关于EF 中的 LINQ 查询 - 多对多和交叉联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426940/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com