我没有得到如何迭代使用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循环的单次迭代中显示这些图像。谁能帮助清楚。 提前谢谢。
答案 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
}
}