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

问题描述:

您好我目前有一个程序,它可以检索WMI信息并将其存储到数据库,然后在一段时间后删除较旧的记录。目前,我正在将程序删除超过10分钟的记录,并且在用新信息填充数据库后每隔2分钟检查一次。在另一个每隔两分钟运行一次的计时器中,存储在数据库中的信息将显示给用户,这与显示在数据库表中的顺序相同。使用LINQ将数据库记录添加到表顶部而不是底部

我遇到的问题发生在程序从新数据库运行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(); 

第1次 硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009十七点27分21秒

硬盘大小:186GB 剩余空间:157GB 日期时间: 19/07/2009 17时29分26秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009十七点31分31秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17时33分36秒

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

第二时间 HDD大小:186GB 剩余空间:157GB 日期时间:19/07/2009十七时37分46秒

HDD大小:186GB 剩余SPAC E:157GB 日期时间:19/07/2009 17时29分26秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17点31分31秒

硬盘容量:186GB 剩余空间:157GB 日期时间:19/07/2009 17时33分36秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17时35分41秒

3时间 硬盘容量:186GB 剩余空间:157GB 日期时间:19/07/2009 17时39分51秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17点37分46秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17时29分26秒

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17:31 :31

硬盘大小:186GB 剩余空间:157GB 日期时间:19/07/2009 17时33分36秒

为什么不只是添加一个排序依据b.DateTime你的LINQ查询?

只是澄清:数据库的性质无序,插入的位置是不确定的,因为实际表中的行的位置是一个毫无意义的概念,在您与交互时使用的抽象级别上在你的代码中对数据库。您必须对一个或多个字段的数据库输出进行排序以应用排序。

+0

干杯我对C#和LINQ相当陌生,并没有想到,很抱歉作为一个n00b – manemawanna 2009-07-19 17:32:30

+0

我们都需要学习一段时间。祝你好运! – JohnFx 2009-07-19 17:34:17

因为没有数据库表的“顶部”和“底部”,所以我不是100%确定要实现的目标。但是,这行代码...

hddInfoAdd.DateTime = dateTime; 

...似乎我错了。它不应该像......

hddInfoAdd.DateTime = DateTime.Now; 

DB理论的中心租户之一是数据存储未排序。这个想法是人们可能想要将数据分类的方式有很多种,因此对原始存储应用特定的排序顺序是很浪费的。这只是一个事故/实施细节,DBMS按照它插入的顺序显示未排序的数据(并且我也看到了并非总是如此的情况)。

如果你想要一个特定的数据顺序,你应该使用order by子句(和潜在的索引)明确地应用这个请求。

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

ALL其他明显的行订单都是一致的。

如果要控制出现的顺序,那么你必须添加列进行治理,并使用ORDER BY您选择要实现它。如果你已经有了列(dateTime),那么你只需要添加ORDER BYs