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

如何使用LINQ筛选满足特定条件的数据表?

使用LINQ实现金属数据筛选需求

原始数据

Metalvalue
silver5
silver_refY
gold2
gold_refN
ironN
iron_refN

筛选规则

仅保留满足以下全部条件的主金属(silver、gold、iron)记录:

  • 该金属的value不等于'N'
  • 对应的[金属名]_ref记录的value等于'Y'

期望结果

Idvalue
silver5

LINQ实现方案

1. 定义数据模型

首先定义对应数据表的实体类:

public class MetalRecord
{
    public string Metal { get; set; }
    public string Value { get; set; }
}

2. 构造数据源

假设原始数据已加载为List<MetalRecord>类型:

var metalRecords = new List<MetalRecord>
{
    new MetalRecord { Metal = "silver", Value = "5" },
    new MetalRecord { Metal = "silver_ref", Value = "Y" },
    new MetalRecord { Metal = "gold", Value = "2" },
    new MetalRecord { Metal = "gold_ref", Value = "N" },
    new MetalRecord { Metal = "iron", Value = "N" },
    new MetalRecord { Metal = "iron_ref", Value = "N" }
};

3. 筛选实现

方式一:先筛选主金属再匹配关联记录

逻辑直观,适合数据量较小的场景:

// 提取所有不带_ref后缀的主金属记录
var mainMetals = metalRecords.Where(r => !r.Metal.EndsWith("_ref"));

// 筛选符合条件的记录
var filteredResult = mainMetals.Where(m =>
    m.Value != "N" &&
    metalRecords.Any(r => r.Metal == $"{m.Metal}_ref" && r.Value == "Y")
).ToList();

方式二:使用Join关联主金属与参考记录

性能更优,避免多次遍历数据源,适合数据量大的场景:

var filteredResult = from main in metalRecords.Where(r => !r.Metal.EndsWith("_ref"))
                     join reference in metalRecords on $"{main.Metal}_ref" equals reference.Metal
                     where main.Value != "N" && reference.Value == "Y"
                     select main;

执行上述代码后,filteredResult中将仅包含符合条件的silver记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:42:41