我有以下代码:
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值的属性。
答案 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();