Je me demande s'il est possible d'interroger ExpandoObject avec le langage LINQ ordinaire ? La raison est que j'ai un ExpandoObject dynamique mais que j'ai besoin d'effectuer quelques requêtes avant de pouvoir passer à autre chose.
Il a certaines propriétés qui restent toujours, par ex. Id
, Notes
mais aussi certaines propriétés dynamiques que je ne peux pas contrôler.
Voici à quoi ressemble ma liste
[
{
"Id": 1,
"FileId": 1,
"Notes": "",
"1": "12.02.1991"
},
{
"Id": 2,
"FileId": 2,
"Notes": "",
"1": "12.02.1991"
}
]
Code
Comme vous pouvez le voir, j'ai mes éléments statiques et je m'assure ensuite que les clés dynamiques de chaque élément deviennent les propriétés de cet élément. Dans cet exemple 1
est essentiel et 12.02.1991
est la valeur
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?
Je ne pense pas que ce soit pertinent, mais voici mon ConvertToExpandoObjects funciton.
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;
}
J'ai essayé de faire simplement quelque chose comme generatedItems.Where(x => x.);
mais évidemment, cela ne me donne rien sur lequel travailler puisqu'il ne sait pas que ces objets ont Id
etc.
Est-il donc possible de l'interroger et si oui, comment ?