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

在C# LINQ中如何按状态将ListRecords拆分为两个独立列表

如何用LINQ将ListRecords拆分为有效/无效两个列表?

原始数据

你的ListRecords列表数据如下:

InCorrectNumber CorrectNumber   Status
---------------------------------------
10101010        7003594558      VALID
20202020        7003310682      VALID
2244448         2222222         INVALID
30303030        6130985705      VALID
3434448         1111111         INVALID
8273648         3333333         INVALID

问题分析

你现有代码的核心问题:

  1. 数据源错误:应该从原始的ListRecords筛选,而非从目标列表(ValidList1/InValidValidList1,初始为空)查询
  2. 类型转换缺失:Where返回的是IEnumerable<T>,需调用ToList()才能转为List<T>
  3. 字符串常量未加引号:VALID/INVALID是字符串的话,必须用双引号包裹
  4. 未按需投影字段:你需要的是不含Status的结果,需通过Select提取目标字段

正确实现方案

假设你的accounts类定义

public class accounts
{
    public string InCorrectNumber { get; set; }
    public string CorrectNumber { get; set; }
    public string Status { get; set; }
}

方案1:两次遍历(简单直观,适合中小数据量)

代码可读性高,性能足够应对大多数场景:

// 生成有效列表,只保留需要的字段
var ValidList1 = ListRecords
    .Where(e => e.Status == "VALID")
    .Select(e => new { e.InCorrectNumber, e.CorrectNumber })
    .ToList();

// 生成无效列表,同样投影目标字段
var InValidList1 = ListRecords
    .Where(e => e.Status == "INVALID")
    .Select(e => new { e.InCorrectNumber, e.CorrectNumber })
    .ToList();

方案2:一次遍历(性能更优,适合大数据量)

仅遍历数据源一次,节省遍历开销:

// 按状态分组
var grouped = ListRecords.GroupBy(e => e.Status == "VALID");

// 从分组中提取有效/无效数据
var ValidList1 = grouped.First(g => g.Key)
    .Select(e => new { e.InCorrectNumber, e.CorrectNumber })
    .ToList();

var InValidList1 = grouped.First(g => !g.Key)
    .Select(e => new { e.InCorrectNumber, e.CorrectNumber })
    .ToList();

或者用foreach手动拆分(逻辑更直白):

var ValidList1 = new List<dynamic>();
var InValidList1 = new List<dynamic>();

foreach (var item in ListRecords)
{
    var resultItem = new { item.InCorrectNumber, item.CorrectNumber };
    if (item.Status == "VALID")
    {
        ValidList1.Add(resultItem);
    }
    else
    {
        InValidList1.Add(resultItem);
    }
}

性能说明

  • 两次遍历方案:代码简洁,中小数据量(万级以内)无性能问题,优先推荐
  • 一次遍历方案:仅遍历一次数据源,十万级以上数据量能明显节省时间,适合性能敏感场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:11:15