2011-07-30 9 views
0

自分のタグがコントローラのアクションに渡されたタグと等しいビューを返す方法がわかりません。
私はこれを行うためのいくつかの賢明かつ簡単な方法があると思うが、私は非常にLINQとSQLに新しいです。 DB
LINQ:リレーションを持つDBを使用したときの問題

コード

// id = tag name, not it's id 
public ActionResult Tag(string id) 
{ 
    // I get all the PostTags where PostTags.Tag.Name = id 
    var postTags = _db.PostTags.Where(x => x.Tag.Name == id); 

    // And what I do now? 
} 

答えて

3

リレーショナルデータの結合を使用することは、拡張メソッドの代わりにクエリ構文を使用して初心者として把握する方が簡単です。拡張メソッド(.Join(...)など)では次のことが可能ですが、これはすでに使用していたSQLに近いものです。

var postTags = from t in _db.Tags 
       join pt in _db.PostTags on t.ID equals pt.TagID 
       join p in _db.Posts on pt.PostID equals p.ID 
       where t.Name == id 
       select p; 
+0

関係が既にLINQクラスにマッピングされている場合、結合は冗長であると思います。 –

+0

@ J.W。私は同意する、Quintinの高度な答えは、関係を示しています。しかし、ラムダとエクスプレッションツリーに苦労しているのであれば、拡張構文はちょっと難しいかもしれません。クエリの構文は、開発者が既に見たものに近い –

0

さてあなたは、に似て何かをすることができ、それらを選択する。..

var posts = _db.Posts.Where(post => post.PostTags.Any(postTag => postTag.Tag.Name == id)); 

これはちょうど、関連PostTagのいずれかのすべてのPost Sを選択しますsにはTagという名前が渡されます。

+0

ありがとうございます。私はもう少し分析して、そこで何が起こっているのか理解しています。 – sed

関連する問題