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# 中执行此操作?
可以使用
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。