LINQ query into ObservableCollection?



将 LINQ 结果强制转换为 ObservableCollection

乔恩·斯基特(Jon Skeet)在这个问题中给出了很好的答案,但我仍然无法自己做。

对课堂还是新手,所以我仍然处于学习阶段。

我已经制作了一个 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;
    }

我创建了一个工作类,它将我需要的数据获取到数据网格中,它从两个日期之间和具有唯一员工编号的工作人员中提取数据。这工作正常,但是当将数据直接更新到数据库时,界面中的数据没有更新,请参阅此问题。

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

这个答案中的代码是可以理解的,但我不知道foo需要什么?

var linqResults = foos.Where(f => f.Name == "Widget");
var observable = new ObservableCollection<Foo>(linqResults);

如何创建可观察集合类来保存 LINQ 查询?

这就是我试图做的事情,但在查询时给了我一个编译错误。

无法隐式转换类型 'System.Collections.Generic.List' to '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();

基本上,您需要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);

你需要 ObservableComputings。使用此库,您可以像这样编写代码:

var linqResults = sql.Staff_Time_TBLs
                     .Filtering(staff =>
                        staff.Date_Data > fromDate &&
                        staff.Date_Data < toDate &&
                        staff.Staff_No == employeeNumber);

在上面的代码中,我假设 sql。Staff_Time_TBLs是 ObservableCollection。linqResults 是 ObservableCollection,反映了 sql 中的所有更改。Staff_Time_TBLs代码中提到的集合和属性。确保上述代码中提到的所有属性都通过 INotifyPropertyChanged 接口通知更改。

相关内容

  • 没有找到相关文章

最新更新