使用LINQ将数据库记录添加到表的顶部而不是底部

时间:2009-07-19 17:16:40

标签: c# database linq sorting

您好我目前有一个程序可以检索WMI信息并将其存储到数据库中,然后在一段时间后删除旧记录。目前我的程序删除了超过10分钟的记录,并在用新信息填充数据库后每2分钟检查一次。在另一个每2分钟运行一次的计时器中,存储在数据库中的信息将显示给用户,其显示顺序与数据库表中显示的顺序相同。

当删除记录10分钟后从新数据库运行程序时,我遇到的问题是,而不是将新记录添加到数据库表的末尾,它们出现在顶部。当一些旧数据被删除后,现有数据已经​​填充数据库时重新打开程序时也会发生这种情况。

下面我添加了代码,显示了如何将数据添加到数据库以及如何删除数据(这种情况发生在2个单独的类中)。下面我已经介绍了一些示例输出数据,这样您就可以理解我的意思了。

基本上我需要一种解决方法,因为数据需要按照基于DateTime收集的顺序显示,所以如果你能发现任何东西,我们将不胜感激,如果没有,最好的解决方法是在数据显示之前对数据进行排序?

DateTime dateTime = DateTime.Now.Subtract(new TimeSpan(0, 0, 10, 0));

var result2 = (from b in hddInfo
               where b.DateTime < dateTime
               select b).DefaultIfEmpty();

foreach (TblHDDInfo record2 in result2)
{
        if (record2 != null)
        {
        localDB.TblHDDInfo.DeleteOnSubmit(record2);
        }
}

localDB.SubmitChanges();

TblHDDInfo hddInfoAdd = new TblHDDInfo();
                            hddInfoAdd.DeviceID = deviceID;
                            hddInfoAdd.IpAdd = ipAdd;
                            hddInfoAdd.Size = size;
                            hddInfoAdd.FreeSpace = freeSpace;
                            hddInfoAdd.DateTime = dateTime;
                            localDB.TblHDDInfo.InsertOnSubmit(hddInfoAdd);

                            localDB.SubmitChanges();

第一次 硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:27:21

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:29:26

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:31:31

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:33:36

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:35:41

第二次 硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:37:46

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:29:26

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:31:31

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:33:36

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:35:41

第3次 硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:39:51

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:37:46

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:29:26

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:31:31

硬盘大小:186GB 剩余空间:157GB 日期时间:2009年7月19日17:33:36

4 个答案:

答案 0 :(得分:3)

为什么不直接将b.DateTime的命令添加到LINQ查询?

只是澄清一下:数据库本质上是无序的,并且插入的位置是不确定的,因为,实际表中行的位置在您与之交互时所处的抽象层次上是无意义的概念。你的代码对数据库。您必须按一个或多个字段对DB输出进行排序以应用排序。

答案 1 :(得分:2)

由于没有数据库表的“顶部”和“底部”,我不能100%确定您要完成的任务。但是,这行代码......

hddInfoAdd.DateTime = dateTime;

......对我来说似乎不对。不应该像......

hddInfoAdd.DateTime = DateTime.Now;

答案 2 :(得分:1)

数据库理论的核心租户之一是数据存储未分类。我们的想法是,人们可能希望在未来对数据进行排序的方式很多,因此将特定排序顺序应用于原始存储是浪费。这只是一个事故/实现细节,DBMS按插入顺序显示未排序的数据(我已经看到过这种情况并不总是如此)。

如果您希望对数据进行特定订单,则应使用order by子句(以及可能的索引)明确应用该要求。

答案 3 :(得分:1)

SQL中唯一的顺序是您根据列值使用ORDER BY强加的顺序。

所有其他明显的行顺序都是Coinidental。

如果要控制外观顺序,则必须添加列来控制它,并在SELECT上使用ORDER BY来实现它。如果您已经有了列(dateTime),那么您只需要添加ORDER BYs