Я пытаюсь использовать динамический запрос linq для извлечения IEnumerable‹T› из коллекции объектов (Linq to Object), каждый из объектов в коллекции имеет внутреннюю коллекцию с другим набором объектов, где хранятся данные, эти значения доступны через индексатор из внешней коллекции
Динамический запрос linq возвращает отфильтрованный набор, как и ожидалось, когда вы работаете со строго типизированными объектами, но мой объект хранит данные в элементе типа dynamic, см. пример ниже:
public class Data
{
public Data(string name, dynamic value)
{
this.Name = name;
this.Value = value;
}
public string Name { get; set; }
public dynamic Value { get; set; }
}
public class DataItem : IEnumerable
{
private List<Data> _collection;
public DataItem()
{ _collection = new List<Data>(); }
public dynamic this[string name]
{
get
{
Data d;
if ((d = _collection.FirstOrDefault(i => i.Name == name)) == null)
return (null);
return (d.Value);
}
}
public void Add(Data data)
{ _collection.Add(data); }
public IEnumerator GetEnumerator()
{
return _collection.GetEnumerator();
}
}
public class Program
{
public void Example()
{
List<DataItem> repository = new List<DataItem>(){
new DataItem() {
new Data("Name", "Mike"),
new Data("Age", 25),
new Data("BirthDate", new DateTime(1987, 1, 5))
},
new DataItem() {
new Data("Name", "Steve"),
new Data("Age", 30),
new Data("BirthDate", new DateTime(1982, 1, 10))
}
};
IEnumerable<DataItem> result = repository.AsQueryable<DataItem>().Where("it[\"Age\"] == 30");
if (result.Count() == 1)
Console.WriteLine(result.Single()["Name"]);
}
Когда я запускаю приведенный выше пример, я получаю: Оператор '==' несовместим с типами операндов 'Object' и 'Int32'
Являются ли члены динамические несовместимыми с запросами Dynamic Linq? Или есть другой способ построения выражений, которые будут правильно оцениваться при работе с элементами типа динамический.
Спасибо большое за вашу помощь.