Question

Utilisation de linq dynamique ( http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library .aspx ) J'exécute la requête ci-dessous qui renvoie un IQueryable. Sur ce résultat qui est aussi un IEnumerable, je peux exécuter un Count () mais il n’existe pas ToList () pour obtenir les valeurs. Je peux les énumérer en utilisant un foreach mais je ne peux pas accéder aux champs individuels du type anonyme résultant sans réflexion. Est-ce le seul moyen? Merci

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);
                }
            }

Tentative de casting mais erreur renvoyée Impossible de convertir l'objet de type 'DynamicClass1' en type 'Test'.

 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; }

}

Était-ce utile?

La solution

Vous ne pouvez pas vous attendre à ce que le type de votre objet dynamique soit résolu au moment de la compilation lorsque votre requête est résolue à l'exécution. C'est ce que dynamique linq est tout: il vous permet d'exécuter des requêtes dynamiques au coût de la vérification de la compilation.

Vous devez utiliser la réflexion pour accéder aux propriétés d'un type dynamique, au moins jusqu'à C # 4.

Autres conseils

Si IEnumerable n'est pas générique, vous devez utiliser le reflet plutôt que d'utiliser la réflexion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top