C#,将列转换为列表中的一行

本文关键字:一行 列表 转换 | 更新日期: 2023-09-27 18:31:24

好的,情况是这样的:我有一个 C# 分部类,它使用 .选择()。ToList() 功能。

我明白这是如何工作的。

但是,我遇到的问题是,类中有四个属性需要在一列中使用。为了增加这一点,每一列都应该绑定到一行,该行显示大量冗余信息。

一个例子有助于:

我目前有这个,比方说,作为我的班级:

public class MyClass{
public string PersonName {get;set;}
public string PersonAddress {get;set;}
public string Field1 {get;set;}
public string Field2 {get;set;}
public string Field3 {get;set;}
public string Field4 {get;set;}
}

这让你对我的班级有一个基本的了解。我最初的建议是将代码设置在执行此操作的位置:

<table>
  <tr>
    <td>Name</td>
    <td>Address</td>
    <td>Field 1<br>Field 2<br>Field 3<br>Field 4</td>
  </tr>
</table>

这是有道理的。

但是,我上面的人已经决定他们想要这样的布局:

<table>
  <tr>
    <td>Name</td>
    <td>Address</td>
    <td>Field 1</td>
  </tr>
  <tr>
    <td>Name</td>
    <td>Address</td>
    <td>Field 2</td>
  </tr>
  <tr>
    <td>Name</td>
    <td>Address</td>
    <td>Field 3</td>
  </tr>
  <tr>
    <td>Name</td>
    <td>Address</td>
    <td>Field 4</td>
  </tr>
</table>

其中,如果您注意到,"姓名"和"地址"对于每一行都是多余的

那么,如何在 C# 中执行此操作?

C#,将列转换为列表中的一行

可以使用

LINQ SelectMany 方法生成一个列表,该列表每个MyClass对象包含 4 个对象,如下所示:

List<MyClass> list = ...
var result = list.SelectMany(x =>
    new[]
    {
        new {x.PersonAddress, x.PersonName, Value = x.Field1},
        new {x.PersonAddress, x.PersonName, Value = x.Field2},
        new {x.PersonAddress, x.PersonName, Value = x.Field3},
        new {x.PersonAddress, x.PersonName, Value = x.Field4}
    }).ToList();

这将返回匿名类型对象的列表。

这些对象中的每一个都将包含一个PersonAddress、一个PersonName和一个Value属性。

然后,您可以遍历它们以生成所需的 HTML。