[英]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.