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

LINQ查询方法使用Contains匹配跨查询结果集字段无法生效如何解决

问题解决方法

你需要先从第一个查询的结果中提取所有MORACODE字段值生成独立的值集合,再用该集合做包含匹配即可,修正后可运行的代码如下:

using (var a2Entity = new A2_Data_UATEntities())
{
    // 提取所有符合条件的MORACODE值集合,无需加载完整MORDetails对象
    var morACodeList = (from a in a2Entity.MORDetails
                        where a.MORCODE == this.dropDown1.SelectedItem.Label
                        select a.MORACODE).ToList();

    var dataResults = (from b in a2Entity.SCADA_DATA
                        where b.COLDATE >= dateCheck1 && b.COLDATE <= dateCheck2
                        // 匹配acode是否在目标MORACODE集合范围内
                        && morACodeList.Contains(b.acode)
                        select b).ToList();
}

优化方案(查询效率更高)

如果数据量较大,你可以直接用关联查询写法,EF会自动生成JOIN语句执行单次数据库查询,避免提前加载第一个集合的性能开销:

using (var a2Entity = new A2_Data_UATEntities())
{
    var dataResults = (from b in a2Entity.SCADA_DATA
                        join a in a2Entity.MORDetails on b.acode equals a.MORACODE
                        where b.COLDATE >= dateCheck1 && b.COLDATE <= dateCheck2
                        && a.MORCODE == this.dropDown1.SelectedItem.Label
                        select b).Distinct().ToList();
}

原代码报错原因

  • morsContent是MORDetails类型的对象列表,直接调用Contains(b.acode)属于类型不匹配,无法完成值校验
  • 原代码中&& morsContent[1].MORACODE属于语法错误,缺少判断条件,且固定下标仅能取单个元素的属性,无法匹配列表所有元素的对应字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:15:03