如何在父级中过滤子列表并返回子级已过滤的父级

我想创建一个linq to sql查询,该查询将返回带有已过滤子列表的对象列表。


听起来很简单,但我不确定如何使它正常工作


这里的SQL查询返回我想要的:


select * from Texts t inner join Translations tt on t.TranslationId = tt.Id 

inner join Pages p on tt.Id = p.TranslationId and tt.NeutralText = p.TitleNeutralTextId

where t.LanguageId = 1

现在,我必须用linq编写此代码。


到目前为止,我所做的是:


var query = this.Queryable() // Page entity

                .AsNoTracking()

                .Include(x => x.TitleTranslation.Texts);


            return (from m in query

                    from l in m.TitleTranslation.Texts

                    where m.TitleTranslation.Texts.Any(l => l.LanguageId == 1)

                    select m);

但这是行不通的,因为我得到了所有语言的子列表,而不是ID为#1的语言。


叮当猫咪
浏览 157回答 3
3回答

繁星coding

我认为您必须尝试一下。这将为您工作。这将类似于sql查询一种方法可以做到这一点。var result = from m in Textsjoin Translations on Texts.TranslationId = Translation.IdJoin Pages on Translations.NeutralText = Pages.NeutralTextwhere Texts.LanguageId = 1select m还有另一种使用实体框架执行此操作的方法var result =       this.Queryable().AsNoTracking().Include(x=>x.Translations).Where(x=>x.LanguageId= 1)

拉丁的传说

我找到了想要的解决方案。解决方案是从文本表开始,分配过滤器,包括所需的Entity(Page),然后将结果放入内存(ToList())。然后选择页面。它会按照我必须的顺序给出我想要的结果。var query = textService.Queryable()               .AsNoTracking()               .Include(x => x.Translation.Pages)               .Where(x => x.LanguageId == languageId).ToList();return query.SelectMany(x => x.Translation.Pages);
打开App,查看更多内容
随时随地看视频慕课网APP