0

我在两个表之间创建了多对多关系

MoviesHashTags由 DbContext 自动创建。

我希望能够使用 Linq 向 MoviesHashTags 表发送查询

问题是我没有它的任何模型,并且 DbContext 没有给我任何使用它的选项。例如类似的东西:

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

有没有办法做到这一点_db.Database.ExecuteSqlCommand("QUERY")

例子:

我想获取所有具有 HashTagId=3 的 ID

表电影HashTags:

在此处输入图像描述

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

表电影:

[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>();
    }

数据库上下文:

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 回答