C# 使用LINQ将数据库记录添加到表的顶部而不是底部
您好,我目前有一个程序,它检索WMI信息并将其存储到数据库中,在一段时间后,旧记录将被删除。目前,我让我的程序删除超过10分钟的记录,并在用新信息填充数据库后每隔2分钟检查一次。在另一个每2分钟运行一次的计时器中,存储在数据库中的信息将显示给用户,其显示顺序与它在数据库表中的显示顺序相同 我遇到的问题是,当程序在10分钟后从新数据库运行时,记录被删除,而不是将新记录添加到数据库表的末尾,它们显示在顶部。一旦删除了一些旧数据,当程序重新打开时,数据库中已经填充了现有数据,也会发生这种情况 下面我添加了代码,显示如何将数据添加到数据库以及如何删除数据(这发生在两个不同的类中)。在下面,我保留了一些示例输出数据,以便您能够理解我的意思 基本上,我需要一种方法来解决这个问题,因为数据需要按照它根据日期时间收集的顺序显示,所以如果你能发现任何东西,我会很感激,如果不是,最好的解决方法是在数据显示之前对其进行排序吗C# 使用LINQ将数据库记录添加到表的顶部而不是底部,c#,database,linq,sorting,C#,Database,Linq,Sorting,您好,我目前有一个程序,它检索WMI信息并将其存储到数据库中,在一段时间后,旧记录将被删除。目前,我让我的程序删除超过10分钟的记录,并在用新信息填充数据库后每隔2分钟检查一次。在另一个每2分钟运行一次的计时器中,存储在数据库中的信息将显示给用户,其显示顺序与它在数据库表中的显示顺序相同 我遇到的问题是,当程序在10分钟后从新数据库运行时,记录被删除,而不是将新记录添加到数据库表的末尾,它们显示在顶部。一旦删除了一些旧数据,当程序重新打开时,数据库中已经填充了现有数据,也会发生这种情况 下面我添
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();
DateTime DateTime=DateTime.Now.Subtract(新的时间跨度(0,0,10,0));
var result2=(来自hddInfo中的b)
其中b.DateTime
第一次
硬盘大小:186GB
剩余空间:157GB
日期时间:19/07/2009 17:27:21
硬盘大小:186GB
剩余空间: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
第二次
硬盘大小: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
硬盘大小:186GB
剩余空间:157GB
日期时间:19/07/2009 17:35:41
第三次
硬盘大小: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
DateTime:19/07/2009 17:33:36为什么不在LINQ查询中添加orderby b.DateTime
只是澄清一下:数据库本质上是无序的,插入的位置是不确定的,因此,在与DB进行代码交互时,实际表中的行位置在抽象级别上是一个毫无意义的概念。您必须按一个或多个字段对DB输出进行排序才能应用排序。我不能100%确定您要完成什么,因为数据库表中没有“顶部”和“底部”。但是,这行代码
hddInfoAdd.DateTime = dateTime;
。。。对我来说似乎是错的。是不是应该像
hddInfoAdd.DateTime = DateTime.Now;
DB理论的核心租户之一是,数据是按未排序的方式存储的。其想法是,人们可能希望通过多种方式对数据进行排序,因此对原始存储应用特定的排序顺序是浪费的。DBMS按照插入的顺序显示未排序的数据只是一个意外/实现细节(我也见过这样的情况)
如果您希望数据具有特定的顺序,那么应该使用ORDERBY子句(以及潜在的索引)显式地应用该要求 SQL中唯一的顺序是使用基于列值的order BY施加的顺序 所有其他明显的行顺序相同。
如果要控制外观顺序,则必须添加列来控制它,并在选择项上使用order BY来实现它。如果您已经有了列(dateTime),那么您只需添加ORDER BYsYe抱歉,我之前收集了dateTime,它适用于所有RecordScheer。我对C#和LINQ是相当陌生的,没有想到,抱歉,我是n00b