【发布时间】:2012-09-21 20:26:34
【问题描述】:
我有一个包含大约 300 万条记录的数据库,每条记录都有 id (int, primary key)、uniqueNumber(int) 和 updateTime(string)。
uniqueNumber 可以属于多个记录。 updateTime 表示一天中记录更新的时间,例如 14:33:42
编辑:记录按更新时间排序。
我想让用户定义一个 uniqueNumber 和一个间隔。然后我想查询数据库以获取属于该 uniqueNumber 的所有记录,其中它们的 updateTime 等于一个变量,每次 where 条件为真时,它的值都会按间隔增加。
例如,我想要这样的东西:(本例中没有使用数据库)
string currentTime = "12:25:00";
int interval = 2;
public void LinqExample()
{
string[] arr = new string[4] { "12:23:00", "12:26:00", "12:27:00", "12:28:00"};
var query = from c in arr
where c.Replace(":", "").CompareTo(currentTime.Replace(":", "")) > 0 && Inc()
select c;
// query's output is: "12:26:00", "12:28:00"
}
private bool Inc()
{
currentTime = DateTime.Parse(currentTime).AddMinutes(interval).ToLongTimeString();
return true;
}
我的代码是正确的方法吗?
谢谢!
【问题讨论】:
-
您将无法使用它直接查询数据库,因为它依赖于本地状态。这种类型的处理需要您从数据库中提取所有记录。我建议重新审视您的要求和架构。
-
好的。但是,当在数据库上使用 linq 时,每次 where 子句为真时,是否可以更改变量的值而不从数据库中提取所有记录?
-
@remi:为了能够做到这一点,您的数据库的 LINQ 提供程序应该能够将
Inc()转换为 SQL。恐怕不太可能。 -
@remi:您使用的是什么 DBMS?你有能力在数据库中创建对象吗?我认为最好在你的数据库中创建函数来返回你需要的所有记录。
-
@remi Aw,如果有一个阈值,我可以想出一个 LINQ 解决方案,它至少有很小的工作机会,具体取决于 LINQ to Entities 的工作原理。但现在我什么都想不出来。我唯一的另一个想法是使用 LINQ 在数据库中尽可能多地过滤,然后在程序中过滤其余部分。无论如何,感谢您回答所有问题。希望我的 cmets 至少可以帮助其他人解决问题。