7
votes

C # - Convertir le type anonyme en observatoireCollection

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


0 commentaires

5 Réponses :


0
votes

êtes-vous sûr que votre objet est un observablecollection en effet? Si oui, vous pouvez simplement lancer: VissibleTasks = (Observablecollection) FilteredRésults;


0 commentaires

1
votes

Vous devriez simplement être capable de le faire:

visibleTasks = new ObservableCollection<MyTasks>(filteredResults);


0 commentaires

2
votes

Quelque chose comme ça ferait le travail en utilisant les fonctions d'inférence de type: xxx


0 commentaires

6
votes

Comme Ekin suggère, vous pouvez écrire une méthode générique qui transforme tout ienumerable dans un observablecollection . Cela a un avantage significatif sur la création d'une nouvelle instance de Observablecollection à 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).

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 tolist ou toarray ), nous pouvons l'appeler toobservablecollection : xxx

Vous pouvez désormais créer une collection observable contenant des types anonymes renvoyés à partir d'une requête LINQ comme ceci: xxx


1 commentaires

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 ?



0
votes

Essayez:

var filteredResults = from visibleTask in visibleTasks
                      where(p => p.DueDate == DateTime.Today)
                      select visibleTask).ToList(); 


0 commentaires