0

2つのテーブル間に多対多の関係を作成しました

テーブルMoviesHashTagsは、DbContextによって自動作成されました。

Linqを使用してMoviesHashTagsテーブルにクエリを送信できるようにしたい

問題は、私にはそのモデルがなく、DbContextがそれを使用するためのオプションを与えていないことです。たとえば、そのようなもの:

_db.MoviesHashTags.Select(i =>i.Id).Where(i => i.HashTagId==3)

せずにこれを行う方法はありますか_db.Database.ExecuteSqlCommand("QUERY")

例:

HashTagId=3のすべてのIDを取得したい

TABLE MoviesHashTags:

ここに画像の説明を入力してください

-------------------------------------------------------------------------

テーブル映画:

[DataContract]
public class Movie 
{
    [DataMember]
    public long Id { get; set; }
    *
    *
    *
    [DataMember]
    public ICollection<HashTag> HashTagsCollection { get; set; }

public Movie()
{
    HashTagsCollection = new HashSet<HashTag>();
} 

テーブルハッシュタグ:

[DataContract]
public class HashTag
{
    [DataMember]
    public long HashTagId { get; set; }
    *
    *
    *
    [DataMember]
    public ICollection<Movie> MoviesCollection { get; set; }

    public HashTag()
    {
        MoviesCollection = new HashSet<Movie>();
    }

DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Movie>().
    HasMany(c => c.HashTagsCollection).
    WithMany(p => p.MoviesCollection).
    Map(
        m =>
       {
        m.MapLeftKey("Id");
        m.MapRightKey("HashTagId");
        m.ToTable("MoviesHashTags");
        });
 }

回答:@DigitalDに感謝します

db.Movies.Where(m => m.HashTagsCollection.Any(h => h.HashTagId == hashTag.HashTagId)).Select(m => m.Id);

4

1 に答える 1

1

Linqは次を処理できる必要があります。

var HashTag = _db.HashTags.Find(3); //or whatever method you need to get a single hashtag
var Movies = _db.Movies.Where(m => m.HashTagsCollection.Contains(HashTag))
                 .Select(m => m.Id);
于 2012-11-21T18:16:29.827 に答える