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 查询多对多表的主要内容,如果未能解决你的问题,请参考以下文章