Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何判断记录是否仍在SQL表中-可能使用linq?_Sql_Linq_Linq To Sql - Fatal编程技术网

如何判断记录是否仍在SQL表中-可能使用linq?

如何判断记录是否仍在SQL表中-可能使用linq?,sql,linq,linq-to-sql,Sql,Linq,Linq To Sql,我有一个SQL数据库,它是一个“feeder”表。我将记录放在上述表格中,第三方软件包将使用(并删除)这些记录。直到第三方软件包停止运行。在思考如何检测时,我对自己说。。。“嗯……如果我读取表中的所有键(不是很大,最多有几十条记录),并保存它们,然后在5分钟内检查表中是否还有键,会怎么样?” 这可能不是一个很好的解决方案,但它让我开始思考Linq以及您是否可以做这样的事情(我以前从未使用过Linq) 因此,如果我将所有记录键读入一个DataTable对象,然后,五分钟后,将所有记录读入另一个Da

我有一个SQL数据库,它是一个“feeder”表。我将记录放在上述表格中,第三方软件包将使用(并删除)这些记录。直到第三方软件包停止运行。在思考如何检测时,我对自己说。。。“嗯……如果我读取表中的所有键(不是很大,最多有几十条记录),并保存它们,然后在5分钟内检查表中是否还有键,会怎么样?”

这可能不是一个很好的解决方案,但它让我开始思考Linq以及您是否可以做这样的事情(我以前从未使用过Linq)

因此,如果我将所有记录键读入一个DataTable对象,然后,五分钟后,将所有记录读入另一个DataTable对象,我可以执行Linq选择,将键列上的两个DataTable对象连接起来,然后查看“计数”的结果,如果有一个或多个,则表中的数据可能没有被消耗


或者。。。还有比这更“聪明”的方法吗?

创建一个删除触发器,将上次删除的时间戳记录在一个单独的表中。另一个INSERT触发器将记录最后一条INSERT语句的时间戳


比较这两个时间戳。

您可以在插入后返回标识列值(假设有一个),并将其记录在单独的表中,以及提交日期时间。他们只是用它来提取未完成的记录

SELECT * FROM feeder_table F
  INNER JOIN other_table T ON (F.id = T.id)
WHERE DATEDIFF(MINUTE, T.commitdate, GETDATE()) > 5
这样,您就不会将数据持久化到内存中,因此它将在应用程序重启之间/跨计算机工作

(如果这只是用于故障检测,则只需存储最后插入的id即可。)

这是一种方法:

DataTable t1 = GetData(); // returns a datatable with an Int16 "Id" column
// time passes... a shabby man enters and steals your lamp
DataTable t2 = GetData();

// some data changes have occurred
t2.Rows.Add(null, DateTime.Now.AddSeconds(10), "Some more");
t2.Rows[1].Delete();

EnumerableRowCollection<DataRow> rows1 = t1.AsEnumerable();
EnumerableRowCollection<DataRow> rows2 = t2.AsEnumerable();

var keys1 = rows1.Select(row => (Int16)row["Id"]).ToList();
var keys2 = rows2.Select(row => (Int16)row["Id"]).ToList();

// how many keys from t1 are still in t2
Console.WriteLine("{0} rows still there", keys1.Count(id => keys2.Contains(id)));
DataTable t1=GetData();//返回具有Int16“Id”列的数据表
//时光流逝。。。一个衣衫褴褛的人进来偷走了你的灯
DataTable t2=GetData();
//发生了一些数据更改
t2.Rows.Add(null,DateTime.Now.AddSeconds(10),“更多”);
t2.行[1]。删除();
EnumerablerRowCollection行s1=t1.AsEnumerable();
EnumerablerRowCollection行s2=t2.AsEnumerable();
var keys1=rows1.Select(row=>(Int16)row[“Id”]).ToList();
var keys2=rows2.Select(row=>(Int16)row[“Id”]).ToList();
//t1中有多少键仍在t2中
WriteLine(“{0}行仍在那里”,keys1.Count(id=>keys2.Contains(id));

但这更符合我的想法:

DataTable t1 = GetData(); // returns a datatable with an Int16 "Id" column
// time passes... your lamp is getting dim
DataTable t2 = GetData();

// some data changes have occurred
t2.Rows.Add(null, DateTime.Now.AddSeconds(10), "Some more");
t2.Rows[1].Delete();

EnumerableRowCollection<DataRow> rows1 = t1.AsEnumerable();
EnumerableRowCollection<DataRow> rows2 = t2.AsEnumerable();

// how many rows from r1 are still in r2
int n = (from r1 in rows1
        join r2 in rows2 on (Int16)r1["Id"] equals (Int16)r2["Id"]
        select r1).Count();
DataTable t1=GetData();//返回具有Int16“Id”列的数据表
//时光流逝。。。你的灯变暗了
DataTable t2=GetData();
//发生了一些数据更改
t2.Rows.Add(null,DateTime.Now.AddSeconds(10),“更多”);
t2.行[1]。删除();
EnumerablerRowCollection行s1=t1.AsEnumerable();
EnumerablerRowCollection行s2=t2.AsEnumerable();
//r1中有多少行仍在r2中
int n=(从第1行中的r1开始)
在(Int16)r1[“Id”]等于(Int16)r2[“Id”]的行2中加入r2
选择r1.Count();

…这是我在原始问题中提到的“linq/join”方法。

您好,简洁,但不幸的是,feeder表不是我可以使用的。所以我不能添加列或创建触发器-这就是它,我所能做的就是将记录放入其中。谢谢