在 C# 中搜索 SQL 服务器 table 中的缺失值

Search for missing values ​in SQL Server table in C#

请告诉我如何解决这个问题。

这是一个例子table:

填充了这样的数据:

我有一种方法可以自动为 CerNambe 列分配一个数字:

public string CerNamber()
{
    var cer = DBContext.Certificate
                       .Where(p => p.CerNambe != null)
                       .OrderByDescending(p => p.Id)
                       .FirstOrDefault();

    string _cer = cer.CerNambe;

    int outCer = Convert.ToInt32(_cer.Substring(0, _cer.IndexOf('-')));
    string newCer = Convert.ToString(outCer + 1 + "-P/" + DateTime.Now.Year);

    return newCer;
}

可是我运行遇到了问题。如果用户错误分配号码,则删除号码,违反编号。

这里的问题是:如何找到这个违规并将丢失的号码分配给下一条记录。但是这样的话,自动编号就不行了?由于该方法正在查找最后一条记录!

如何找到这个违规并将缺失的号码分配给下一条记录?

如果我是你,我会修改数据库模式,这样我就不必这样做了。但如果必须,最简单但最丑陋的方法是使用 RegEx 来过滤和查找特殊模式。

解决方案: 如果您的底层数据库提供程序是 SQL 服务器,您可以使用 SqlMethods.Like 将数据库结果集过滤为可管理的子集然后可以使用 RegEx 在本地分析的数据。

Linq to Entities 不支持正则表达式,因为它无法将其转换为 SQL。您可以将所有记录加载回内存,然后对它们使用 Linq to Objects(对变量执行 a.ToList(),然后对该正则表达式执行第二个 LINQ 查询),但这意味着您将加载每个数据库记录到内存中 运行 这个查询。

同样的建议适用:修改数据库架构,这样您就不必这样做了。

要了解 RegEx,请访问: System.Text.RegularExpressions.RegexClass