【问题标题】:Remove empty properties from object in list in C#从 C# 列表中的对象中删除空属性
【发布时间】:2017-08-16 10:23:54
【问题描述】:

我有以下代码:

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 的列表。

项目常规

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 的 ItemGeneral 对象?
  • “过滤掉所有属性”是什么意思?
  • 我想返回一个过滤列表,其中的对象只包含具有值的属性。所以没有空值的属性。
  • But It don't work with the code above. 你想让代码做什么?它实际上是做什么的?
  • 你这样做的目的是什么?

标签: c# list


【解决方案1】:

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

但是使用匿名类型和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();

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多