加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# – 将匿名类型转换为observablecollection

发布时间:2020-12-15 04:34:04 所属栏目:百科 来源:网络整理
导读:我有一个返回匿名类型的LINQ语句.我需要在Silverlight应用程序中将此类型设置为ObservableCollection.但是,最接近我可以得到它 列出myObjects; 谁能告诉我怎么做? ObservableCollectionMyTasks visibleTasks = e.Result;var filteredResults = from visible
我有一个返回匿名类型的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

我如何从匿名类型转变为可观察的集合?

谢谢

解决方法

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

现在,您可以创建一个包含从LINQ查询返回的匿名类型的可观察集合,如下所示:

var oc = 
  (from t in visibleTasks   
   where t.IsSomething == true
   select new { Name = t.TaskName,Whatever = t.Foo }
  ).ToObservableCollection();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读