从C#中的列表中的对象中删除空属性

时间:2017-08-16 10:23:55

标签: c# list

我有以下代码:

var result = dataService.ItemGeneralSearch_v1("ddd", value[0], value[0]);

var newList = result.Where(x => x.GetType().GetProperties()
                  .Select(p => p.GetValue(x, null))
                  .Any(p => p != null)).ToList();

结果包含一个带有ItemGeneral-object的List。

ItemGeneral

public class ItemGeneral
{
    public string ITEM_NO { get; set; }
    public string ITEM_TYPE { get; set; }
    public string ITEM_STATE { get; set; }
    public string ITEM_NAME { get; set; }
    public string PRODNAME_NO { get; set; }
    public string PRODNAME_NO2 { get; set; }
}

我想要完成的事情是过滤掉ItemGeneral对象中具有空值的所有属性。但它不适用于上面的代码。

我想返回一个过滤列表,其中的对象只包含带有值的属性。所以没有带有null值的属性。

1 个答案:

答案 0 :(得分:0)

如果您想使用自定义类型,则无法实现此目的。原因是,如果您定义具有某些属性的类型,那么在初始化该类型时,属性就在那里,无论您是否为它们分配值。

但是,使用匿名类型和dynamic,您可以:

var result = data.Select(item => {
        dynamic expando = new ExpandoObject();
        var x = expando as IDictionary<string, object>;
        foreach (var p in item.GetType().GetProperties().Where(p => p.GetValue(item) != null))
            x[p.Name] = p.GetValue(item, null);
        return expando;
    }).ToList();