2016-09-08 94 views
1

私は画像用のテーブルを持っています.1つはジョブ用、もう1つはUsers用です。ユーザーがジョブを投稿すると、そのユーザーのイメージをテーブルImageから自動的に割り当てたいと思う。会社がロゴ/イメージを更新したいときに、自分のすべてのジョブをテーブルImageとUserIDからの新しいイメージで自動的に更新し、ImageIDを持つ行をから更新しないようにするために、User ImageIDをJobテーブルに保存したくないジョブテーブル。私が試したものをここで他の2つのIDが2つの異なるテーブルで一致する場合はIDを取得

:それは上記のコードでは

var listOfJobs = db.Jobs.AsEnumerable(); 

    var ProfileImage = db.Images.Where(
        p => listOfJobs.Any(l => p.UserID == l.ApplicationUsers.Id)).ToList(); 

    return View(ProfileImage); 

は、すべてのジョブで画像テーブル内のすべての画像が表示されます。

参加してみる必要がありますか?私はちょっと結合を使う方法を知らないし、この状況に合っていれば私はしない。

+0

あなたの 'AsEnumerable'がデータベースの使用を妨げることは知っていますか?クエリはすべてメモリにロードされ、そこでフィルタリングされます。 SQLは生成されませんが、 'SELECT * FROM db.Jobs'が生成されます。それはうまくいくかもしれませんが、効率的ではなく、将来的にテーブルが大きくなると失敗するかもしれません。 –

+0

小規模の修正:遅延ロードがオフの場合のみ。それがオンの場合、db.ImagesはSQLクエリ – Hegi

+0

を大量に生成します@Hegi:興味深い、わからなかった。私は、AsEnumerableが代わりにLinq-To-Objectメソッドを呼び出すと考えました。ですから 'Images'の全ての画像に対して' Enumerable.Any'が呼び出されます。 –

答えて

2
あなたはID型が intであると仮定すると、まだお持ちでない場合は、次の

1-新しいクラス/テーブルJobImageを追加行うことができます

、このテーブルが格納されますありがとうございました次のようにそれに対応する画像と、各ジョブ

public class JobImage 
{ 
    public int JobID{get;set;} 
    public int ImageID{get;set;} 

    public Job {get;set;} 
    public Image{get;set;} 
} 

2-が今、あなたのクエリはなります:

var ProfileImage = (from a in db.ApplicationUsers 
        join ij in db.JobImages on a.JobID equals ij.JobID 
        join i in db.Images on ij.ImageID equals i.ImageID 
        where a.UserID == **YourUserID** 
        select i).SingleOrDefault() 

    return View(ProfileImage); 
0あなたはあなたが追加することができます考慮

  1. 私は新しいクラス/テーブルを導入方法、ジョブIDとIMAGEID の両方が主キーと外部キー
  2. あるにかかることがありますの

    、3-いくつかのシナリオ主キーJobImageIDJobIDImageIDのみ外部キー、あなたが

が、これは、HELを願っ履歴を追跡するために、ビットともCreatedOn日付としてIsActiveを追加することができますp you

+0

私は先月にこれを試す時間がなかったが、2日間私はこれを稼働させようとしており、なぜ3番目のテーブル 'JobImages'が必要なのか分からない。私は、イメージテーブルとユーザーテーブルを結合しようとしましたが、テーブルからすべてのイメージを与えます。あるいは別の方法を試しました。 '(ユーザーの のaから、 のa.UserID == b.Idを選択してください).ToList(); '。 'Where'節は完全に無視され、Image.Userid == Users.Idではなく、すべてのレコードが返されます。どうして? – Eduard

関連する問題