为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
叮当猫咪 2021-05-04 21:30:02
我想创建一个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.TitleNeutralTextIdwhere 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的语言。
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

我认为您必须尝试一下。这将为您工作。这将类似于sql查询


一种方法可以做到这一点。


var result = from m in Texts

join Translations on Texts.TranslationId = Translation.Id

Join Pages on Translations.NeutralText = Pages.NeutralText

where Texts.LanguageId = 1

select m

还有另一种使用实体框架执行此操作的方法


var result =       

this.Queryable().AsNoTracking().Include(x=>x.Translations).Where(x=>x.LanguageId= 1)


查看完整回答
反对 回复 2021-05-21
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

我找到了想要的解决方案。解决方案是从文本表开始,分配过滤器,包括所需的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);


查看完整回答
反对 回复 2021-05-21
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信