J'utilise DbLinq qui devrait être l'équivalent de Linq2SQL pour cette question. Je dois générer une requête Linq2SQL où je spécifie les colonnes que je veux renvoyer à l'exécution. Je peux y parvenir en utilisant les méthodes d'extension de Dynamic Linq, mais je n'arrive pas à extraire le résultat.Accès Linq résultat contenu dans une classe dynamique
string someProperty = "phonenumber";
string id = "1234";
Table<MyClass> table = context.GetTable<MyClass>();
var queryResult = (from item in table where item.Id == id select item).Select("new (" + someProperty + ")");
L'expression LINQ génère le SQL correct de:
select phonenumber from mytable where id = '1234'
Et dans le débogueur je peux voir la valeur est assis là phonenumber dans la vue des résultats. Le problème est que je ne peux pas calculer comment obtenir la valeur phonenumber de l'objet queryResult? Le type de QueryResult est:
QueryProvider<DynamicClass1>
Edit: Je découvert une façon de le faire, mais il semble très brut.
IEnumerator result = (from item in table where item.Id == id select item).Select("new (" + someProperty + ")").GetEnumerator();
result.MoveNext();
var resultObj = result.Current;
PropertyInfo resultProperty = resultObj.GetType().GetProperty(someProperty);
Console.WriteLine(resultProperty.GetValue(resultObj, null));
Peut-être que quelqu'un connaît une manière plus propre?
Le problème il y a la méthode dynamique d'extension LINQ Select retourne un objet IQueryable et non un objet IQueryable. Le résultat de cela n'est aucune des méthodes pratiques ToList etc. sont disponibles. Bien que je suppose que finalement ces méthodes doivent juste utiliser le IEnumberator sous le capot de toute façon. –
sipwiz