我想知道是否可以使用常规的LINQ查询ExpandoObject?原因是我有一个动态的ExpandoObject,但我需要在传递之前进行一些查询。
它有一些属性始终保持不变,比如Id、Notes,但也有一些我无法控制的动态属性。
以下是它们的列表:
我试图简单地做类似于
那么,能否查询它,如果可以,怎样查询?
它有一些属性始终保持不变,比如Id、Notes,但也有一些我无法控制的动态属性。
以下是它们的列表:
[
{
"Id": 1,
"FileId": 1,
"Notes": "",
"1": "12.02.1991"
},
{
"Id": 2,
"FileId": 2,
"Notes": "",
"1": "12.02.1991"
}
]
代码
正如您所看到的,我有我的静态项目,然后确保每个项目的动态键变成该项目的属性。在这个例子中,1
是键,12.02.1991
是值。
var generatedItems = new List<object>();
foreach (var item in items)
{
var modifiedItem = new List<KeyValuePair<string, object>>
{
new KeyValuePair<string, object>("Id", item.Id),
new KeyValuePair<string, object>("FileId", item.FileId),
new KeyValuePair<string, object>("Notes", item.Notes)
};
modifiedItem.AddRange(item.Fields.Select(field => new KeyValuePair<string, object>(field.Key, field.Value)));
generatedItems.Add(ConvertToExpandoObjects(modifiedItem)); // Here I construct object from key/value pairs
}
return generatedItems; // Is it possible to query this thing?
我认为这并不相关,但这是我的ConvertToExpandoObjects函数。
public static dynamic ConvertToExpandoObjects(IEnumerable<KeyValuePair<string, object>> pairs)
{
IDictionary<string, object> result = new ExpandoObject();
foreach (var pair in pairs)
result.Add(pair.Key, pair.Value);
return result;
}
我试图简单地做类似于
generatedItems.Where(x => x.);
的操作,但显然它没有什么可用的内容,因为它不知道这些对象是否有Id
等属性。那么,能否查询它,如果可以,怎样查询?
object
,而且object
没有Id
的定义。(编译时错误) - StanList<dynamic>
,以避免每次需要使用它们时都必须进行强制转换。 - dcastro