C# - 将隐式类型转换为ObservableCollection

时间:2010-02-28 15:48:06

标签: c# linq silverlight

我有一个返回隐式类型的LINQ语句。我需要在Silverlight 3应用程序中将此类型设置为ObservableCollection。 Silverlight 3中的ObservableCollection构造函数仅提供空构造函数。因此,我无法直接将结果转换为ObservableCollection。这是我的代码:

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

如何从隐式类型变量转到可观察集合?

谢谢

3 个答案:

答案 0 :(得分:5)

您可以手动添加项目,如下所示:

visibleTasks = new ObservableCollection<MyTasks>();
foreach(var item in filteredResults)
    visibleTasks.Add(item);

您可以使用以下扩展方法在一行中执行此操作:

///<summary>Adds zero or more items to a collection.</summary>
public static void AddRange<TItem, TElement>(this ICollection<TElement> collection, IEnumerable<TItem> items)
    where TItem : TElement {
    if (collection == null) throw new ArgumentNullException("collection");
    if (items == null) throw new ArgumentNullException("items");

    foreach (var item in items)
        collection.Add(item);
}

visibleTasks = new ObservableCollection<MyTasks>();
visibleTasks.AddRange(filteredResults);

答案 1 :(得分:2)

您可以编写一个将枚举转换为ObservableCollection的扩展方法,如下所示:

public static ObservableCollection<T> ToObservableCollection<T>(this IEnumerable<T> source)
{
  ObservableCollection<T> obsColl = new ObservableCollection<T>();
  foreach (T element in source)
  {
    obsColl.Add( element );
  }
  return obsColl;
}

现在您可以调用以下语句:

visibleTasks = filteredResults.ToObservableCollection();

答案 2 :(得分:1)

使用带有ObservableCollection<T>的<{1}}构造函数:

IEnumerable<T>