簡體   English   中英

使用Lambda表達式在多對多關系表中實現查詢

[英]using Lambda expression for implementing a query in many-to-many relation tables

根據圖片,我設計了3個表,分別是Article,Tag和ArticleTag。 ArticleTag是Article和Tag表之間的關聯表。 現在,我想使用Lambda表達式創建一個查詢,該查詢根據TagId獲取文章。

我已經使用了Entity Framework6.x。首先,我通過查詢根據tagTitle獲得了TagId。

// tagTitle is a parameter that passed to a method.
// isActiveTag is a parameter that passed to a method.
int currentTagId = DataContextFactory.GetDataContext()
            .Tags.Where(p => p.Title == tagTitle && p.IsActive == isActiveTag)
            .Select(p => p.Id).SingleOrDefault();

現在,我想使用currentTagId來獲取與其相關的文章。

如何通過Lambda表達式創建查詢以根據currentTagId獲取文章?

public class Tag : Entity, ITag
{
    public string Title { get; set; }
    public string Description { get; set; }
    public bool? IsActive { get; set; }
    public virtual ISet<ArticleTag> ArticleTags { get; set; }
    public virtual ISet<ProjectTag> ProjectTags { get; set; }
}
public class Article : Entity, IArticle
{
    public virtual int? UserMemberShipId { get; set; }

    public virtual string Title { get; set; }

    public virtual string Summary { get; set; }

    public virtual string Description { get; set; }

    public virtual decimal? RateCounter { get; set; }

    public virtual int? LikeCounter { get; set; }

    public virtual bool IsActive { get; set; }

    public virtual bool IsActiveNewComment { get; set; }

    public virtual ISet<Comment> Comments { get; set; }

    public virtual ISet<Rating> Ratings { get; set; }

    public virtual ISet<AttachmentFile> AttachmentFiles { get; set; }

    public virtual ISet<ArticleTag> ArticleTags { get; set; }

    public virtual ISet<ArticleLike> ArticleLikes { get; set; }
}

public class ArticleTag : Entity, IArticleTag
{
    public virtual int TagId { get; set; }
    public virtual int ArticleId { get; set; }
    public virtual Article Article { get; set; }
    public virtual Tag Tag { get; set; }
    public virtual int? Extra { get; set; }
}

在此處輸入圖片說明

您已經在按所需的標題進行過濾,因此您應該能夠僅通過其他表的鍵將它們聯接在一起,並選擇匹配的“文章”記錄。

試試這個:( 我當然不能測試,但是看看它是否有效)

var context = DataContextFactory.GetDataContext();

var articles = (from tag in context.Tags
                join ta in context.ArticleTags on tag.Id equals ta.TagId
                join article in context.Articles on ta.ArticleId equals article.Id
                where tag.Title == tagTitle
                   && tag.IsActive == isActiveTag
                select article).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM