You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于关联表多值过滤LINQ查询获取Meta实体

解决方案

要获取符合要求的Meta实体(要么自身属于指定站点,要么关联的View属于指定站点),可以用以下两种LINQ实现方式:

方式1:用Any检查关联View

Metas = await siteExp.MetaEntriesAsync(m => 
    m.SiteId == site.Id || 
    (m.ViewId.HasValue && siteExp.Views.Any(v => v.Id == m.ViewId.Value && v.SiteId == site.Id))
);
  • 保留了你原代码中Meta.SiteId == site.Id的条件,若不需要可直接移除该部分。
  • m.ViewId.HasValue用于避免空值引发的查询错误。

方式2:显式Join关联查询

var query = from m in siteExp.Metas
            join v in siteExp.Views on m.ViewId equals v.Id into viewJoin
            from v in viewJoin.DefaultIfEmpty()
            where m.SiteId == site.Id || (v != null && v.SiteId == site.Id)
            select m;

Metas = await query.ToListAsync();
  • 这种方式完全匹配你给出的SQL语句逻辑,通过Join关联Meta和View后筛选结果。

优化建议

如果给Meta实体添加View导航属性:

public class Meta : DbAssets, IMeta
{
    // 原有属性...
    public virtual View View { get; set; }
}

可以进一步简化查询:

Metas = await siteExp.MetaEntriesAsync(m => 
    m.SiteId == site.Id || 
    (m.View != null && m.View.SiteId == site.Id)
);

内容的提问来源于stack exchange,提问作者SteinTech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 14:22:39