gpt4 book ai didi

c# - 使用 Linq to Sql 在序列中查找漏洞

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:23 25 4
gpt4 key购买 nike

我正在对 SQL Server Compact 数据库使用 Linq to Sql。我需要一种快速的方法来找到基于整数的列中的第一个孔,或者如果不存在,则找到最高数字 + 1。

如果我使用 SQL 来做,我会这样做:

SELECT IdLegacy+1 FROM FLUID AS t1
LEFT JOIN FLUID as t2
ON t1.IdLegacy = t2.IdLegacy+1
WHERE t2.IdLegacy IS NULL

基本上,我需要在 Linq to Sql 中使用类似的东西来实现相同的目的。因为它会在每次插入时被调用,所以我需要它快速且优雅 :-D。

谢谢

最佳答案

左外连接在 LINQ to SQL 中看起来像这样

from t1 in fluid
join t2 in fluid on t1.LegacyId + 1 equals t2.LegacyId into t3
from maybeGap in t3.DefaultIfEmpty()
where maybeGap == null
select new { t1 = t1 }

maybeGap 现在反射(reflect)了来自 fluid 的 left outer join 记录。 SQL Compact 的 LINQ 提供程序可能是有限的,因为 SQL Compact 非常有限,但这是它的基本要素。

您可以使用这个小测试用例对其进行测试:

var list = new List<int> { 1, 2, 3, 5 };

var q =
from x in list
join y in list on x + 1 equals y into y
from z in y.DefaultIfEmpty()
where z == 0
select x + 1
;

foreach (var item in q)
Console.WriteLine(item);

打印 46,忽略最后一个,因为它会一直存在,如果不使用窗口函数,就没有简单的方法来防止它发生受 SQL Compact 支持。

关于c# - 使用 Linq to Sql 在序列中查找漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com