我想知道是否可以使用常规 LINQ 查询 ExpandoObject?原因是我有动态 ExpandoObject 但我需要做一些查询才能进一步通过。
它具有一些始终保持不变的属性,例如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
等等。
那么是否可以查询它,如果可以,那么如何查询呢?