2017-06-07 10 views
0

ラムダ式で左結合したい。しかし、どうすればいいのか分かりません。私は多くのLINQクエリを試しましたが、適切なクエリを取得していません。私はEntity Frameworkの初心者です。だから私がそれをやる方法を知っている人なら、私に知らせてください。EFを使用してC#でラムダ式で左結合を行う方法はありますか?

ここで私は、以下のこのクエリを試しています

var query = UsersContext.Users.OrderBy(a => a.Email).Skip(skip).Take(pageSize).ToList(); 
var result = (from u in db.Notification 
       join c in query on u.id equals c.Id into j1 
       from j2 in j1.DefaultIfEmpty() 
       select new { u, j2 }).OrderByDescending(a => a.u.datetime).Take(3).ToList(); 

は、これが私のクエリです。私はそれを通知テーブルに参加させて残して、最後の3つの通知だけを取得したい。

+0

EFはORMです。 LINQはORMの上にあるクエリ言語であり、SQLの置換ではありません。エンティティのナビゲーションプロパティとリレーションを定義する必要があります。* NOT *それらをテーブルのように結合しようとします。あなたの 'User'クラスは、あなたが通知を取得するのに使うことができる' Notifications'コレクションプロパティを持っているはずです。 –

+0

エンティティフレームワークのためのヒントbcs i m newを教えてください。 –

+0

'UsersContext'と' db'は異なる 'DbContext'ですか? –

答えて

0
var query = UsersContext.Users.Blah().Blah().ToList(); 
// It's a non-complete List of Users.... (all we care about) 

var ids = query.Select(u=>u.Id).ToArray(); 
// get an array of needed Users. 

var notes = (from u in db.Notification 
       where ids.Contains(u.id) 
       select u).ToList(); 

var results = from u in notes 
      join c in query on u.id equals c.Id into j1 
      from j2 in j1.DefaultIfEmpty() 
      select new { u, j2 }).OrderByDescending(a => a.u.datetime).Take(3).ToList(); 
関連する問題