使用linq检查db中是否存在字符串

时间:2014-05-09 19:55:33

标签: c# wpf linq

这是我的尝试:

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中找到一个不存在的批号。如何更改上面的代码,以便在我检入db并且列为null时,只需添加数字,而不是在比较时抛出异常。我认为这可能是目前唯一的问题。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

bool lotNumDbExists = db.LotInformation(r => r.lot_number.Equals(r.lot_number)).Any;

或.exists

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