Frage

Mit dynamischer Linq ( http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library aspx ) ich betreibe die Abfrage unter dem eine IQueryable zurückgibt. Auf diesem Ergebnis, die einen Count () aber auch eine IEnumerable Ich bin in der Lage zu laufen ist es nicht ToList (), um die Werte zu erhalten. Ich kann über sie aufzuzählen eine foreach verwenden, aber bin nicht in der Lage, die einzelne Felder in dem resultierenden anonymen Typ ohne Reflexion zuzugreifen. Ist dies der einzige Weg? Dank

var query =
                db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
                OrderBy("CompanyName").
                Select("New(CompanyName as Name, Phone)");

            foreach (var item in query)
            {
                foreach (var prop in item.GetType().GetProperties())
                {
                    Console.WriteLine(prop);
                }
            }

Versuchte Casting bekam aber einen Fehler Konnte nicht das Objekt des Typs ‚DynamicClass1‘ werfen ‚Test‘ zu geben.

 foreach (var item in query)
            {
                Console.WriteLine("{0}: {1}", ((Test)item).CompanyName, ((Test)item).Phone);
            }

public class Test {
            public string CompanyName { get; set; }
            public string Phone { get; set; }

}

War es hilfreich?

Lösung

Sie können nicht die Art der Sie dynamische Objekt erwarten bei der Kompilierung aufgelöst werden, wenn Ihre Abfrage zur Laufzeit aufgelöst wird. Das ist, was dynamische Linq geht:. Ermöglicht es Ihnen, dynamische Abfragen auf Kosten der Kompilierung Zeit auszuführen Überprüfung

Sie haben Reflektion verwenden Eigenschaften eines dynamischen Typs zuzugreifen, zumindest bis C # 4.

Andere Tipps

Wenn die IEnumerable ist nicht generisch, dann sollten Sie nicht verwenden Reflexion werfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top