Попытка сделать IEnumerable любого типа AsQueryable, поэтому я могу использовать Dynamic Linq

Я не буду знать, какой тип содержит мой Enumerable, и я пытаюсь сделать его AsQueryable, поэтому я могу использовать Dynamic Linq. Например:

    static string Query(object obj, string expression)
    {
        var q = ((IEnumerable<object>)obj).AsQueryable();
        var a = q.Where(expression, "").First();
        return a.ToString();
    }

Я установил тестовую программу (ниже), чтобы попробовать несколько вещей, но я не могу понять, как это сделать. Я получаю исключение Нет свойства или поля "AddressId" не существует в типе "Объект"

это происходит в Dynamic.cs, в методе Expression ParseMemberAccess (тип типа, экземпляр выражения)

используя System.Linq.Dynamic;

class Address
{
    public int AddressId { get; set; }
    public string Street { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var a = new Address() { AddressId = 1, Street = "10 main st" };
        var aList = new List<Address>();
        aList.Add(a);
        aList.Add(a);

        var q1 = aList.AsQueryable();
        var a1 = q1.Where(i => i.AddressId == 1).First();

        var q2 = aList.AsQueryable();
        var a2 = q2.Where("AddressId == @0", 1).First();

        object obj3 = aList;
        var q3 = ((IEnumerable<Address>)obj3).AsQueryable();
        var a3 = q3.Where("AddressId == @0", 1).First();

        //This case fails!
        object obj4 = aList;
        var q4 = ((IEnumerable<object>)obj4).AsQueryable();      
        var a4 = q4.Where("AddressId == @0", 1).First();                
    }
}

В непосредственном окне q1, q2, q3, q4 выглядят одинаково - EnumerableQuery знает тип...

{System.Collections.Generic.List1[TestAsQueryable.Address]} base {System.Linq.EnumerableQuery}: {System.Collections.Generic.List1[TestAsQueryable.Address]}


person dr9    schedule 24.10.2011    source источник
comment
удар. (если здесь нет ответов, есть ли какой-нибудь другой форум, который я должен попробовать?)   -  person dr9    schedule 01.11.2011
comment
Пожалуйста, проверьте мой ответ ссылка   -  person Johan    schedule 01.02.2012