Динамический Linq - Выполнение запроса к объекту с элементами типа «динамический»

Я пытаюсь использовать динамический запрос linq для получения IEnumerable из коллекции объектов (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"]);
    }

Когда я запускаю приведенный выше пример, я получаю: Operator '= = 'несовместим с типами операндов' Object 'и' Int32 '

динамический член несовместимы с динамическими запросами Linq? Или есть другой способ построения выражений, которые будут правильно оцениваться при работе с членами типа dynamic

Большое спасибо за вашу помощь.

7
задан Darsegura 12 January 2012 в 02:04
поделиться