2016-07-09 2 views
1

Cast LINQ result to ObservableCollectionЗапрос LINQ в ObservableCollection?

Джон Скит дает отличный ответ в вопросе, но я все еще не могу сделать свой собственный.

Новым для classes, поэтому я все еще участвую в фазах обучения.

Я создал класс LINQ to SQL и, очевидно, существует много сгенерированного кода. Это фрагмент класса, сгенерированного при добавлении класса, который имеет отношение к этому вопросу. Это, очевидно, связано с таблицей базы данных с именем Staff_Time_TBL.

public partial class Staff_Time_TBL : INotifyPropertyChanging, INotifyPropertyChanged 
    { 

     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); 

     private long _ID; 

     private System.Nullable<System.DateTime> _Date_Data; 
    } 

У меня есть рабочий класс, который я сделал, что получает данные мне нужно в Datagrid, Он извлекает данные из двух дат и с сотрудником с уникальным номером персонала. Это прекрасно работает, но при обновлении данных dirrectly в базу данных, данные в интерфейсе не обновляется, see this question.

internal class DatabaseQueries 
    { 
     public static IEnumerable<Staff_Time_TBL> MainTable(DatabaseDataContext database, DateTime fromDate, DateTime toDate, int employeeNumber) 
     { 
      return database.Staff_Time_TBLs.Where(staff => 
       staff.Date_Data > fromDate && 
       staff.Date_Data < toDate && 
       staff.Staff_No == employeeNumber); 
     } 

This code in this answer понятно, но я понятия не имею, что foo должны были бы быть?

var linqResults = foos.Where(f => f.Name == "Widget"); 

var observable = new ObservableCollection<Foo>(linqResults); 

Как создать класс Observablecollection для хранения запроса LINQ?

Это то, что я пытался что-то сделать, но дает мне ошибку компиляции в запросе.

Не может неявно преобразовать тип 'System.Collections.Generic.List' в 'System.Collections.ObjectModel.ObservableCollection'

public ObservableCollection<Staff_Time_TBL> observerableInfoData { get; set; } 

     public MainWindow() 
     { 
      DataContext = this; // required for C# binding 
      InitializeComponent();    

          observerableInfoData = new ObservableCollection<Staff_Time_TBL>(); 
       observerableInfoData = sql.Staff_Time_TBLs.Where(staff => staff.Staff_No == SelectedEmployee.Key && 
               staff.Date_Data == filterFrom && 
               staff.Date_Data == filterTo).Select(staff => staff.Info_Data).ToList(); 

ответ

4

В принципе, вам нужно пройти IEnumerable<Staff_Time_TBL> результат из фактический запрос к базе данных для инициализации ObservableCollection<Staff_Time_TBL>:

var linqResults = sql.Staff_Time_TBLs 
        .Where(staff => staff.Staff_No == SelectedEmployee.Key && 
            staff.Date_Data == filterFrom && 
            staff.Date_Data == filterTo); 

var observable = new ObservableCollection<Staff_Time_TBL>(linqResults); 
+0

Ahh, теперь я вижу. Спасибо за это. Один вопрос, как я могу сделать это в классе? Я поддерживал помощь до сих пор. – KyloRen

+0

@KyloRen: Насколько я могу судить, исходя из вашего комментария здесь, этот ответ затронул ваш вопрос и должен быть принят. Если у вас есть новый вопрос, задайте новый вопрос, не ставьте на новые вопросы этот вопрос. –

+0

@PeterDuniho, на полпути через вопрос, я спрашиваю об этом: «Как я могу создать класс Observablecollection для хранения запроса LINQ?», Это моя цель и цель вопроса. – KyloRen

Смежные вопросы