具有DynamicObject的Linq
我有一个列表,其中MyType:DynamicObject。MyType从DynamicObject继承的原因是,我需要一个可以包含未知数量属性的类型 在我需要筛选列表之前,一切正常。有没有一种方法可以让linq做这样的事情:具有DynamicObject的Linq,linq,c#-4.0,dynamic,Linq,C# 4.0,Dynamic,我有一个列表,其中MyType:DynamicObject。MyType从DynamicObject继承的原因是,我需要一个可以包含未知数量属性的类型 在我需要筛选列表之前,一切正常。有没有一种方法可以让linq做这样的事情: return all items where any of the properties is empty string or white space? 只要每个对象的属性在内部不是未知的,你就可以这样做 没有一种很好的通用方法来测试动态对象的所有属性,如果您不能控制D
return all items where any of the properties is empty string or white space?
只要每个对象的属性在内部不是未知的,你就可以这样做 没有一种很好的通用方法来测试动态对象的所有属性,如果您不能控制
DynamicObject
,那么您希望实现者实现GetDynamicMemberNames()
,并且您可以使用nuget包ImpromptuInterface的方法进行和
否则,因为它是您自己的类型MyType
,所以您可以添加您自己的方法来查看这些成员值的内部记帐
return allItems.Where(x => x.MyValues.Any(y=>String.IsNullOrWhitespace(x));
(从评论中)我可以用列表进行上面的linq查询吗
是的,以下是如何使用ExpandoObject
:
var list = new List<ExpandoObject>();
dynamic e1 = new ExpandoObject();
e1.a = null;
e1.b = "";
dynamic e2 = new ExpandoObject();
e2.x = "xxx";
e2.y = 123;
list.Add(e1);
list.Add(e2);
var res = list.Where(
item => item.Any(p => p.Value == null || (p.Value is string && string.IsNullOrEmpty((string)p.Value)))
);
var list=newlist();
动态e1=新的ExpandooObject();
e1.a=零;
e1.b=“”;
动态e2=新的ExpandooObject();
e2.x=“xxx”;
e2.y=123;
列表。添加(e1);
增加(e2);
var res=list.Where(
item=>item.Any(p=>p.Value==null | |(p.Value是string&&string.IsNullOrEmpty((string)p.Value)))
);
ExpandoObject
提供了一个接口,让您可以像在字典中一样枚举其属性-值对,从而使检查它们的过程更加简单。还有其他类型可以包含未知属性,例如ExpandoObject
。如果您可以使用ExpandoObject
而不是DynamicObject
,您的生活会轻松很多。我需要检查我正在使用的UI控件是否支持ExpandoObject,但是如果支持,我在从DynamicObject到ExpandoObject的转换中没有问题。问题是,我能用列表执行上面的linq查询吗?谢谢你给我指向ExpandooObject的指针。我给它+1,但不能接受它作为答案,因为我不能继承ExpandoObject,而且jbtule直接回答了我的问题。
var list = new List<ExpandoObject>();
dynamic e1 = new ExpandoObject();
e1.a = null;
e1.b = "";
dynamic e2 = new ExpandoObject();
e2.x = "xxx";
e2.y = 123;
list.Add(e1);
list.Add(e2);
var res = list.Where(
item => item.Any(p => p.Value == null || (p.Value is string && string.IsNullOrEmpty((string)p.Value)))
);