从通用列表中删除属性/列

ank*_*kur 6 c# linq generics list

由于某种原因,我无法更改查询,因此我必须在C#中执行此操作.

我有一节课:

public class myClass
{
    int id { get; set; }
    string name { get; set; }
    DateTime sDate { get; set; }
    bool status { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我得到的数据在此列表中获取.现在我想要的是从具有null值的列表中删除这些属性.我听起来很疯狂,但你读得对.我想过只创建一个只包含所选属性的列表,但是上面的任何属性都可以null.所以我必须设计一种机制来根据这个过滤我的列表.

为了更清楚,请考虑以下示例.

List<myClass> lstClass = some data source.
Run Code Online (Sandbox Code Playgroud)

获取数据后,通用列表(lstClass)看起来像这样.考虑表中的结果集:

Id Name Sdate status
1  a    null  null
2  b    null  null
3  c    null  false
Run Code Online (Sandbox Code Playgroud)

我可以在删除属性sdate之后如何使我的列表看起来像这样.所以我想要创建的新列表应该只有三个属性.

Id Name status
1  a    null
2  b    null
3  c    false
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?我可以使用Linq吗?

PS:这与演示文稿无关.我没有网格,我无法隐藏不是我想要的列.

M4N*_*M4N 18

假设您有一个myClass实例的通用列表,您可以创建一个只包含所需属性的匿名类型:

List<myClass> list = ...;
var reducedList = list.Select(e => new {e.id, e.name, e.status}).ToList();
// note: call to ToList() is optional

foreach (var item in reducedList)
{
    Console.WriteLine(item.id + " " + item.name + " " + item.status);
    //note: item does not have a property "sDate"
}
Run Code Online (Sandbox Code Playgroud)

  • @ M4N,但我不知道哪一列是空白的,所以我不能硬了.你能提供一个例子,你首先确定必须在匿名类中传递的列名块. (2认同)