Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有DynamicObject的Linq_Linq_C# 4.0_Dynamic - Fatal编程技术网

具有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

我有一个列表,其中MyType:DynamicObject。MyType从DynamicObject继承的原因是,我需要一个可以包含未知数量属性的类型

在我需要筛选列表之前,一切正常。有没有一种方法可以让linq做这样的事情:

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)))
);