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

如何使用C# LINQ将数据行拆分为两行并保留关联字段?

用LINQ实现数据集字段拆分需求

当然可以用LINQ轻松实现这个需求!而且完全能满足你“结果不嵌套”的要求,我给你详细说说怎么写:

首先,假设你的原数据是一个IEnumerable<OriginalItem>,先定义一下原数据的模型类(如果还没定义的话):

public class OriginalItem
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Percent { get; set; }
    public int RowIndex { get; set; }
}

然后定义转换后的结果模型类,用来存储拆分后的数据:

public class ResultItem
{
    public int ProductId { get; set; }
    public string DataType { get; set; }
    public object Value { get; set; } // 兼容string和decimal两种类型,若需要统一类型可改为string并做转换
    public int RowIndex { get; set; }
}

接下来就是核心的LINQ转换代码,这里用到SelectMany方法——它的作用就是把每个原数据项映射成多个结果项,同时自动将所有结果平铺成一个无嵌套的IEnumerable<ResultItem>:

// 假设originalData是你的原数据集
IEnumerable<OriginalItem> originalData = GetYourOriginalData();

var splitResult = originalData.SelectMany(item => new[]
{
    // 生成Name对应的行
    new ResultItem
    {
        ProductId = item.ProductId,
        DataType = "Name",
        Value = item.Name,
        RowIndex = item.RowIndex
    },
    // 生成Percent对应的行
    new ResultItem
    {
        ProductId = item.ProductId,
        DataType = "Percent",
        Value = item.Percent,
        RowIndex = item.RowIndex
    }
});

额外小技巧

如果你不想提前定义ResultItem类,也可以直接用匿名类型来简化代码,省去定义类的步骤:

var splitResult = originalData.SelectMany(item => new[]
{
    new { item.ProductId, DataType = "Name", Value = item.Name, item.RowIndex },
    new { item.ProductId, DataType = "Percent", Value = item.Percent, item.RowIndex }
});

要是你需要把Value统一成字符串类型(比如后续处理更方便),只需要把Value的赋值改成:

  • Name行:Value = item.Name(本来就是字符串)
  • Percent行:Value = item.Percent.ToString("F2")(保留两位小数,格式可按需调整)

这样处理后,你得到的就是完全平铺的结果集合,没有任何嵌套,完全符合你的要求哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:09