У меня есть оператор 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
Как я могу пойти от анонимного типа до заметного набора?
Спасибо
Как предлагает Экин, вы можете написать общий метод, который превращает любой 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();
Вероятно, XML-файл находится в каталоге данных ClickOnce (XML-файлы автоматически помечаются как файлы данных).
Чтение Доступ к локальным и удаленным данным в приложениях ClickOnce (MSDN). В нем объясняется, как файлы данных используются и к ним обращаются с помощью ClickOnce. Если вы хотите опубликовать XML-файл как файл приложения (вы хотите, чтобы он был опубликован в том же каталоге, что и приложение), выполните следующие действия:
Если вы хотите использовать его в качестве файла данных, есть пример в упомянутой статье.
-121--3311272-Похоже, что вы отправляете свои координаты в поле запроса.
Это, кажется, означает, что вы ищете в Google Maps что-то рядом с этими координатами. Кажется, он нашел одну вещь и дает вам результат поиска вместе с вашими запросами.
Удаление параметра & embed показывает, что это действительно так:
http://maps.google.com/maps?q=37.421770, -122.08448
Я бы предложил прочитать инструкции API статических карт Google немного аккуратнее и создать URL, который просто отображает маркер, а не запрашивает точку. Вот так:
Удачи!
-121--4859253- Действительно ли вы уверены в том, что ваш объект является коллекцией наблюдательных элементов
? Если да, вы можете просто бросить: visibleTasks = (ObservableCollection) filteredResults;
Вы должны просто уметь это сделать:
visibleTasks = new ObservableCollection<MyTasks>(filteredResults);
Что-то вроде этого могло бы работать с использованием функций вывода типа:
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));
}