使用C#MVC4中的JOIN检索并迭代数据

时间:2016-06-28 15:35:44

标签: c# asp.net-mvc-4 join

我没有得到如何迭代使用join检索的数据。 表项目图像

[img_id]  INT           IDENTITY (1, 1) NOT NULL,
[proj_id] INT           NOT NULL,
[path]    NVARCHAR (50) NOT NULL,
PRIMARY KEY CLUSTERED ([img_id] ASC),
CONSTRAINT [FK_projimg_projects] FOREIGN KEY ([proj_id]) REFERENCES [dbo].[Projects] ([proj_id])

表项目

[proj_id]   INT            IDENTITY (1, 1) NOT NULL,
[proj_name] NVARCHAR (50)  NOT NULL,
[step1]     NVARCHAR (MAX) NOT NULL,
[step2]     NVARCHAR (MAX) NOT NULL,
[step3]     NVARCHAR (MAX) NOT NULL,
[step4]     NVARCHAR (MAX) NOT NULL,
[user_id]   INT            NOT NULL,
[materials] NVARCHAR (MAX) NOT NULL,
[tag]       NVARCHAR (50)  NOT NULL,
PRIMARY KEY CLUSTERED ([proj_id] ASC),
CONSTRAINT [FK_Projects_user] FOREIGN KEY ([user_id]) REFERENCES [dbo].[Users] ([user_id])

我使用以下查询

检索数据
var tutorial = from proj in de.Projects
    join image in de.projimgs
    on proj.proj_id equals image.proj_id
    select new {
       proj.proj_name,
       proj.materials,
       proj.step1,
       proj.step2,
       proj.step3,
       proj.step4,
       image.path,
    };

现在我想迭代数据,每个项目包含多个图像,我如何在foreach循环的单次迭代中显示这些图像。谁能帮助清楚。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

那么你可以在两个foreach循环中迭代,如

foreach(project p in tutorial)
{
   foreach(image in p.Images)
   {
       //Do your processing
    }
}

答案 1 :(得分:0)

首先,如果您将外键设置为映射属性,Rahul的答案是最简单的。如果您确实需要进行加入,那么您的查询就不太对了。

请记住您的SQL语句正在执行的操作。当您进行INNER JOIN时,您需要为每个值组合提供一个结果。您的查询等效于(大致):

SELECT proj.proj_name, proj.proj_name, proj.materials, proj.step1, proj.step2, proj.step3, proj.step4, image.path
FROM Project proj
INNER JOIN Project_Images image ON image.ProjectId = proj.Id

根据您的select语句,您将获得项目的多个副本 - 每个图像一个。你只需循环这些结果。

听起来你写的不正确,你真正想要的是一个小组:

var tutorial = from proj in de.Projects
    join image in de.projimgs on proj.proj_id equals image.proj_id
    group image by proj into groupedImages
    select new { Project = groupedImages.Key, Images = groupedImages };

然后你循环它:

foreach (var project in tutorial)
{
    // Do what you want with project here
    foreach (var image in project.Images)
    {
        // Do what you want with image here
    }
}