C# - преобразуйте анонимный тип в observablecollection

У меня есть оператор LINQ, который возвращает анонимный тип. Я должен заставить этот тип быть ObservableCollection в моем приложении Silverlight. Однако самое близкое я могу получить его к a

Список 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

Как я могу пойти от анонимного типа до заметного набора?

Спасибо

7
задан DOK 1 February 2011 в 14:16
поделиться

4 ответа

Как предлагает Экин, вы можете написать общий метод, который превращает любой IEnumerable в ObservableCollection . Это имеет одно существенное преимущество перед созданием нового экземпляра ObservableCollection с использованием конструктора - компилятор C # может автоматически вывести параметр универсального типа при вызове метода, поэтому вам не нужно писать тип элементы. Это позволяет вам создать коллекцию анонимных типов, что иначе было бы невозможно (например, при использовании конструктора).

Одним из улучшений по сравнению с версией Экина является запись метода как метода расширения. Следуя обычному шаблону именования (например, 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();
6
ответ дан 7 December 2019 в 03:15
поделиться

Вероятно, XML-файл находится в каталоге данных ClickOnce (XML-файлы автоматически помечаются как файлы данных).

Чтение Доступ к локальным и удаленным данным в приложениях ClickOnce (MSDN). В нем объясняется, как файлы данных используются и к ним обращаются с помощью ClickOnce. Если вы хотите опубликовать XML-файл как файл приложения (вы хотите, чтобы он был опубликован в том же каталоге, что и приложение), выполните следующие действия:

  1. Перейдите в свойства проекта
  2. Перейдите на вкладку публикации.
  3. Нажмите приложение Files»
  4. Найдите XML-файл в списке и измените статус публикации на «Include».
  5. Измените значение параметра «Download Group» на «Required».

Если вы хотите использовать его в качестве файла данных, есть пример в упомянутой статье.

-121--3311272-

Похоже, что вы отправляете свои координаты в поле запроса.

Это, кажется, означает, что вы ищете в Google Maps что-то рядом с этими координатами. Кажется, он нашел одну вещь и дает вам результат поиска вместе с вашими запросами.

Удаление параметра & embed показывает, что это действительно так:

http://maps.google.com/maps?q=37.421770, -122.08448

Я бы предложил прочитать инструкции API статических карт Google немного аккуратнее и создать URL, который просто отображает маркер, а не запрашивает точку. Вот так:

http://maps.google.com/maps/api/staticmap?zoom=14&size=512x512&maptype=roadmap&markers=color: blue 'label: | 37,421770, -122.08448 & sensor = false

Удачи!

-121--4859253-

Действительно ли вы уверены в том, что ваш объект является коллекцией наблюдательных элементов ? Если да, вы можете просто бросить: visibleTasks = (ObservableCollection) filteredResults;

0
ответ дан 7 December 2019 в 03:15
поделиться

Вы должны просто уметь это сделать:

visibleTasks = new ObservableCollection<MyTasks>(filteredResults);
1
ответ дан 7 December 2019 в 03:15
поделиться

Что-то вроде этого могло бы работать с использованием функций вывода типа:

private static ObservableCollection<T> CreateObservable<T>(IEnumerable<T> enumerable)
{
    return new ObservableCollection<T>(enumerable);
}

static void Main(string[] args)
{

    var oc = CreateObservable(args.Where(s => s.Length == 5));
}
2
ответ дан 7 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: