J'ai une instruction LINQ qui renvoie un type anonyme. J'ai besoin d'obtenir ce type d'observationCollection dans mon application Silverlight. Cependant, le plus proche que je puisse l'obtenir à une liste
liste myObjects; p>
peut-on me dire comment faire cela? P>
ObservableCollection<MyTasks> visibleTasks = e.Result; var filteredResults = from visibleTask in visibleTasks select visibleTask; filteredResults = filteredResults.Where(p => p.DueDate == DateTime.Today); visibleTasks = filteredResults.ToList(); // This throws a compile time error
5 Réponses :
êtes-vous sûr em> que votre objet est un observablecollection code> en effet? Si oui, vous pouvez simplement lancer:
VissibleTasks = (Observablecollection) FilteredRésults; Code> P>
Vous devriez simplement être capable de le faire:
visibleTasks = new ObservableCollection<MyTasks>(filteredResults);
Quelque chose comme ça ferait le travail en utilisant les fonctions d'inférence de type:
Comme Ekin suggère, vous pouvez écrire une méthode générique qui transforme tout Une amélioration sur la version d'Ekin consiste à écrire la méthode sous forme de méthode d'extension. Suite au modèle de dénomination habituel (tel que Vous pouvez désormais créer une collection observable contenant des types anonymes renvoyés à partir d'une requête LINQ comme ceci: p> ienumerable
observablecollection
Observablecollection code> à l'aide du constructeur - Le compilateur C # est capable d'inférer le paramètre de type générique automatiquement lors de l'appelant une méthode, de sorte que vous n'avez pas besoin d'écrire le type de les éléments. Cela vous permet de créer une collection de types anonymes, qui ne seraient pas autrement possibles (par exemple lors de l'utilisation d'un constructeur).
tolist code> ou
toarray code>), nous pouvons l'appeler
toobservablecollection code>: p>
Y a-t-il un moyen de le faire sans utiliser de génériques? Je veux dire, avec code en ligne et sans créer de vrai type. Quelque chose comme Observablecollection
Essayez:
var filteredResults = from visibleTask in visibleTasks where(p => p.DueDate == DateTime.Today) select visibleTask).ToList();