use*_*662 7 c# linq anonymous-types observablecollection
我有一个返回匿名类型的LINQ语句.我需要在Silverlight应用程序中将此类型设置为ObservableCollection.但是,最接近我可以得到它
列出myObjects;
谁能告诉我怎么做?
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
Run Code Online (Sandbox Code Playgroud)
我如何从匿名类型转变为可观察的集合?
谢谢
正如Ekin建议的那样,你可以编写一个通用的方法,将任何一个IEnumerable<T>变成一个ObservableCollection<T>.这比创建ObservableCollection使用构造函数的新实例有一个明显的优势- C#编译器能够在调用方法时自动推断泛型类型参数,因此您不需要编写元素的类型.这允许您创建匿名类型的集合,这是不可能的(例如,在使用构造函数时).
对Ekin版本的一个改进是将该方法编写为扩展方法.按照通常的命名模式(例如ToList或ToArray),我们可以调用它ToObservableCollection:
static ObservableCollection<T> ToObservableCollection<T>
(this IEnumerable<T> en) {
return new ObservableCollection<T>(en);
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以创建一个包含从LINQ查询返回的匿名类型的可观察集合,如下所示:
var oc =
(from t in visibleTasks
where t.IsSomething == true
select new { Name = t.TaskName, Whatever = t.Foo }
).ToObservableCollection();
Run Code Online (Sandbox Code Playgroud)