使用 Linq to Sql 识别 运行 的开始和结束
Identify beginning and end of a run using Linq to Sql
我有一个问题,我已经设法通过迭代解决了(如图所示),但我认为一定有一种方法可以查询数据库并获得相同的结果?
short id;
if (someBoolean)
{
id = 99;
while (id > 0)
{
if (!db.MY_TABLEs.Any(x => x.ID == id))
break;
id--;
}
}
else
{
id = 1;
while (id < 100)
{
if (!db.MY_TABLEs.Any(x => x.ID == id))
break;
id++;
}
}
基本上我有一个 table 的整数,从 0 开始到 100 结束。某处的数据存在差距,可能是 24-58 或 35-93 等。基于boolean
值我需要确定间隙的开始或结束。
示例数据
{ 0, 1, 2, 98, 99, 100 }
// Start of gap, returns 3
// End of gap, returns 97
您可以使用 Enumerable.Range
和 Except
来获得想要的结果
//Input array { 0, 1, 2, 98, 99, 100 };
var array = db.MyTables.Select(x => x.Id).ToList();
//Get the first and last elements
int a = array.OrderBy(x => x).First();
int b = array.OrderBy(x => x).Last();
//Fill the complete list
var completelist = Enumerable.Range(a, b - a + 1).ToList();
//Filter the missing list
var missingfromlist = completelist.Except(array).ToList();
//Read first and last element from missing list
Console.WriteLine($"Start of gap: { missingfromlist.First()}, End of gap : { missingfromlist.Last()}");
输出
Start of gap: 3, End of gap : 97
我有一个问题,我已经设法通过迭代解决了(如图所示),但我认为一定有一种方法可以查询数据库并获得相同的结果?
short id;
if (someBoolean)
{
id = 99;
while (id > 0)
{
if (!db.MY_TABLEs.Any(x => x.ID == id))
break;
id--;
}
}
else
{
id = 1;
while (id < 100)
{
if (!db.MY_TABLEs.Any(x => x.ID == id))
break;
id++;
}
}
基本上我有一个 table 的整数,从 0 开始到 100 结束。某处的数据存在差距,可能是 24-58 或 35-93 等。基于boolean
值我需要确定间隙的开始或结束。
示例数据
{ 0, 1, 2, 98, 99, 100 }
// Start of gap, returns 3
// End of gap, returns 97
您可以使用 Enumerable.Range
和 Except
来获得想要的结果
//Input array { 0, 1, 2, 98, 99, 100 };
var array = db.MyTables.Select(x => x.Id).ToList();
//Get the first and last elements
int a = array.OrderBy(x => x).First();
int b = array.OrderBy(x => x).Last();
//Fill the complete list
var completelist = Enumerable.Range(a, b - a + 1).ToList();
//Filter the missing list
var missingfromlist = completelist.Except(array).ToList();
//Read first and last element from missing list
Console.WriteLine($"Start of gap: { missingfromlist.First()}, End of gap : { missingfromlist.Last()}");
输出
Start of gap: 3, End of gap : 97