2016-06-28 4 views
0

joinを使用して取得されたデータを反復処理する方法がわかりません。 表プロジェクト画像C#MVC4で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ループの1回の繰り返しでこれらの画像を表示しますか?誰でも明確に助けることができます。 ありがとうございます。

答えて

1

さてあなたは、あなたがあなたの外部キーがマップされたプロパティとして設定している場合は、ラーフルの答えが最も簡単です、

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

まずように2つのforeachループで、その後繰り返すことができます。実際に結合を行う必要がある場合は、クエリが正しくはありません。

SQL文が何をしているのか注意してください。 INNER JOINを実行すると、値の組み合わせごとに1つの結果が求められます。あなたのクエリは(大体)と同等です:SELECT文を考える

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 

は、プロジェクトの複数のコピーを取り戻すだろう - 各画像に1つ。それらの結果をループするだけです。

それはあなたが間違っていると、あなたが実際に望むことによって、グループで書いたもののように聞こえる:

その後
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 
    } 
} 
関連する問題