填充ObservableCollection的ObservableCollection,由两个数据库列分隔

时间:2012-06-27 09:56:09

标签: c# sql sql-server linq linq-to-sql

我的数据库如下:

ID   Date   Number   NumberIWishToRecord

我希望使用Linq-to-SQL查询来填充ObservableCollection<ObservableCollection<CustomClass>>

我想要的是只选择行Number == a given parameter

ID指的是一个人,我想要做的是获取有关某个人的所有信息并将其存储在ObservableCollection中,因此我将拥有ObservableCollection<CustomClass>CustomClass仅保存一行信息,每个ObservableCollection<CustomClass>仅保存一个人的信息(记录在不同日期)。

然后,我希望选择ObservableCollection ObservableCollection<CustomClass>,其中包含所有人的信息!

所以,一些样本数据:

ID   Date          Number   NumberIWishToRecord
1    27-06-2012    0.1933   25
1    28-06-2012    0.1933   27
1    29-06-2012    0.1933   29
2    14-06-2012    0.1933   412
2    15-06-2012    0.1741   321

因此,当我运行我的方法时,我只想返回给定参数的Numbers,在我的情况下,我将选择0.1933。

然后我想要将ID = 1的两个行保存在ObservableCollection<CustomClass>中,将ID == 2保存在另一个ObservableCollection<CustomClass>中的单行。然后,这两个ObservableCollections都将保存在他们自己的ObservableCollection中!举例说明:

ObservableCollection<ObservableCollection<CustomClass>>
     ObservableCollection<CustomClass>
         1    27-06-2012    0.1933   25
         1    28-06-2012    0.1933   27
         1    29-06-2012    0.1933   29
     ObservableCollection<CustomClass>
         2    14-06-2012    0.1933   412

我如何在linq中写一个查询来执行此操作?

1 个答案:

答案 0 :(得分:0)

我只是编写一个标准的查询语法Linq表达式来实现这一点,你可以为你的表调整它。

        var rowsById = new ObservableCollection<ObservableCollection<row>>(
            from r in _rows
            where r.number == 1.2
            group r by r.ID into rowIdGroup
            select new ObservableCollection<row>(rowIdGroup));

如果需要将行中的数据转换为CustomClass:

        var rowsById = new ObservableCollection<ObservableCollection<CustomClass>>(
            from r in _rows
            where r.number == 1.2
            group r by r.ID into rowIdGroup
            select new ObservableCollection<CustomClass>(
                rowIdGroup.Select(r => new CustomClass
                                        {
                                            ID = r.ID,
                                            Number = r.number // add more
                                        })));

或者如果您更喜欢所有表达式中的查询语法:

        var rowsById = new ObservableCollection<ObservableCollection<CustomClass>>(
            from r in _rows
            where r.number == 1.2
            group r by r.ID into rowIdGroup
            select new ObservableCollection<CustomClass>(
                from gr in rowIdGroup select new CustomClass
                                        {
                                            ID = gr.ID,
                                            Number = gr.number
                                        }));