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

时间:2016-01-21 17:57:52

标签: c# list

好的,情况就是这样:我有一个C#partial类,它使用.Select()。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#中做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以使用LINQ SelectMany method生成一个列表,其中每个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();

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

这些对象中的每一个都将包含PersonAddressPersonNameValue属性。

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