使用linq检查数据库中是否存在字符串

本文关键字:是否 存在 字符串 数据库 linq 检查 使用 | 更新日期: 2023-09-27 18:02:41

这是我的尝试:

public void ReadLot(LotInformation lot)
    {
        try
        {
using (var db = new DDataContext())
            {
                var lotNumDb = db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(r.lot_number));
                if (lotNumDb.lot_number != null && lotNumDb.lot_number.Length == 0)
                {
                    Console.WriteLine("does not exist. yay");
                    var lotInfo = db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(lotNumber));
                }
                else if (lotNumDb.lot_number.ToString().Equals(lot.lot_number))
                {
                    errorWindow.Message = LanguageResources.Resource.Lot_Exists_Already;
                    dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
                }

我想做的是:

当用户上传文件时,我会检查内存中反序列化的字符串在数据库中是否重复。如果是,弹出一个对话框,说它是重复的/已经存在,之后什么都不发生。如果不是重复,请继续应用程序。此外,如果数据库中表中的列为null,则将批号存储在那里,然后继续。

我注意到了一些事情。如果数据库是空的,并且我运行上面的程序,我会得到一个null异常,因为我试图在数据库中找到很多不存在的数字。我该如何更改上面的代码,以便如果我签入db并且列为null,那么只需添加数字,在比较时不引发异常。我认为这可能是目前唯一的问题。

使用linq检查数据库中是否存在字符串

我不确定这应该做什么,但你不需要它:

var lotNumDb =
    db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(r.lot_number));

相反,只需检查传递给该方法的lot_number是否存在,并使用Any来确定是否存在任何匹配项。如果它返回true,则批号已在数据库中。

// Check for duplicates
var isDuplicate = db.LotInformation.Any(r => r.lot_number == lot.lot_number);
if (isDuplicate)
{
    // Inform user that the lot_number already exists
    return;
}
Console.WriteLine("does not exist. yay");
// Store the lot_number in the database
bool lotNumDbExists = db.LotInformation(r => r.lot_number.Equals(r.lot_number)).Any;

或存在

如果存在,则应返回的true或false。