Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用内部联接将6个表联接在一起&一个左外部联接-LINQ_C#_Mysql_Sql Server_Linq_Join - Fatal编程技术网

C# 使用内部联接将6个表联接在一起&一个左外部联接-LINQ

C# 使用内部联接将6个表联接在一起&一个左外部联接-LINQ,c#,mysql,sql-server,linq,join,C#,Mysql,Sql Server,Linq,Join,我有6张桌子。像这样: 下面是我试图在LINQ中重新编写的SQL代码 SELECT dbo.TimeTable.Day, dbo.TimeTable.StartTime, dbo.TimeTable.Duration, dbo.Module.ModuleRef, dbo.Module.ModuleName, dbo.Course.CourseRef, dbo.Room.RoomRef, dbo.Room.RoomName, dbo

我有6张桌子。像这样:

下面是我试图在LINQ中重新编写的SQL代码

SELECT        dbo.TimeTable.Day, dbo.TimeTable.StartTime, dbo.TimeTable.Duration, dbo.Module.ModuleRef, dbo.Module.ModuleName, dbo.Course.CourseRef, dbo.Room.RoomRef, dbo.Room.RoomName, 
                         dbo.Room.RoomFloor, dbo.Room.RoomNumber, dbo.Building.BuildingRef, dbo.Building.BuildingName
FROM            dbo.Room INNER JOIN
                         dbo.TimeTable INNER JOIN
                         dbo.Module ON dbo.TimeTable.ModuleId = dbo.Module.Id ON dbo.Room.Id = dbo.TimeTable.RoomId INNER JOIN
                         dbo.Building ON dbo.Room.BuildingId = dbo.Building.Id LEFT OUTER JOIN
                         dbo.Course INNER JOIN
                         dbo.CourseModule ON dbo.Course.Id = dbo.CourseModule.CourseId ON dbo.Module.Id = dbo.CourseModule.ModuleId

如果有人能给我指出将此转换为LINQ语句的正确方向?我不熟悉linq语句的这个概念。谢谢你的帮助

试着不要因为有6个表以及内部和左侧连接而不知所措。尝试学习将两个集合(内部和左侧)连接在一起的概念,然后将linq链接在一起。现在代码看起来有点复杂,但事实并非如此

给定以下内存中对象:

        var rooms = new List<Room>();
        var timeTables = new List<TimeTable>();
        var modules = new List<Module>();
        var buildings = new List<Building>();
        var courses = new List<Course>();
        var courseModules = new List<CourseModule>();

LinqPad的重要部分是,您可以直接访问db对象,并且可以处理linq查询并查看生成的sql。然后,您可以使用sql并确保执行计划看起来良好,并且可以添加任何索引来优化查询。

如果您只想进行转换,请使用LinqPad。在结果窗口旁边将有一个单独的选项卡,用于获取生成的LINQ查询有一个带有lambda符号的选项卡。。。检查that@Rahul当我单击该选项卡并再次尝试运行它时,该选项卡为空。没有显示任何结果嗯。。。不确定,但您可能想查看此帖子
           var result = rooms
            .Join(timeTables,
                room => room.Id,
                table => table.RoomId,
                (room, table) => new {room, table})
            .Join(modules,
                arg => arg.table.ModuleId,
                module => module.Id,
                (room_table, module) => new {room_table, module})
            .Join(buildings,
                arg => arg.room_table.room.BuildingId,
                building => building.Id,
                (room_table_module, building) => new {room_table_module, building})
            .GroupJoin(courseModules,
                arg => arg.room_table_module.module.Id,
                coursemodule => coursemodule.ModuleId,
                (room_table_module_building, coursemodules) => new { room_table_module_building, coursemodules})
            .SelectMany(arg => arg.coursemodules.DefaultIfEmpty(),
                (arg, coursemodule) => new { arg.room_table_module_building, coursemodule })
            .Join(courses,
                arg => arg.coursemodule.CourseId,
                course => course.Id,
                (room_table_module_building_coursemodule, course) => new { room_table_module_building_coursemodule, course });