LINQ to Entities 查询多对多表

Posted

技术标签:

【中文标题】LINQ to Entities 查询多对多表【英文标题】:LINQ to Entities querying a many to many table 【发布时间】:2021-12-09 06:15:21 【问题描述】:

我正在尝试从用户过滤一个或多个标签的多对多表中实现一些过滤功能。我目前有以下查询(从我正在使用的版本简化):

var query = from adm in admissionContext.SampleTable
        from tag in admissionContext.SampleTags.Where(t => t.SampleID == adm.ID).DefaultIfEmpty()
        from tagItem in admissionContext.SampleTagElements.Where(i => i.ID == tag.ElementID).DefaultIfEmpty()
        where searchFilter.TagIDs.Count == 0 || searchFilter.TagIDs.Contains(tag.ElementID)
        select new SampleInfo
        
            ID = adm.ID,
            ReferralTags = tagItem != null ? tagItem.TagText : string.Empty,
        ;

过滤工作正常,并且有额外的逻辑将结果按其 SampleTableID 分组以将结果合并在一起,但如果有多个标签针对 SampleTable 记录,则仅检索一个(包含检查的结果)并显示在 UI 中,但我希望它也返回相同 SampleID 下的所有相关 SampleTag。但我不确定 LINQ to entity 语法是做什么的。

这是更大查询的一部分,因此理想情况下我需要坚持使用 LINQ to entity。

【问题讨论】:

【参考方案1】:

好像你要加入 3 个表,这里有 2 种方法 -

    您可以通过 join 关键字加入您的表格,然后在其上使用 GroupBy()。 您可以将列值作为主键以字典形式传递到其他表的外键中,然后应用联接。

希望对你有用。

**建议 - 请尽量避免复杂的查询 linq 比 lambda 表达式慢。

【讨论】:

以上是关于LINQ to Entities 查询多对多表的主要内容,如果未能解决你的问题,请参考以下文章

十一 .Django 多对多表ManyToManyField (ORM)

Django:表多对多查询聚合分组FQ查询事务

EF Core 多对多关系上的 LINQ 查询

来自两个多对多表的MYSQL搜索查询优化

改进多对多关系的 LINQ 查询

使用 linq/Entity Framework 查询多对多关系。代码优先