使用 Linq 确定特定查询是否生成任何结果或具有任何结果

本文关键字:任何 结果 是否 Linq 查询 使用 | 更新日期: 2023-09-27 18:34:21

我有一个特定的函数,可以检查特定行是否与查询条件匹配。如果是这样,那么我检索值并将其存储在我的变量中,如果它没有值,我插入它。但是我有一个 try{} catch{} 块来确定它是否存在。如果它进入一个 catch 块内部,我调用一个函数,它会在该表中插入一条记录,我想知道这种方法是否好,调用 catch 块内的函数,可以吗,有什么替代方案可以找出我的查询是否返回结果。这是我的代码

public void CheckApplicationNo(string TableName,string BranchNo)
    {
        try
        {
            var appno = (from app in dt.sys_Keys
                         where app.TableName == TableName && app.BranchNo.ToString() == BranchNo
                         select app.NewValue).Single();
                Global.ApplicationNo = appno.ToString();
                UpdateApplicationNo("Data_Customer_Log", Global.BranchNo);
        }
        catch (Exception ex)
        {
            InsertApplicationNo(); 
        }

    }

欢迎任何建议。谢谢。

使用 Linq 确定特定查询是否生成任何结果或具有任何结果

你应该使用 .SingleOrDefault()

select app.NewValue).SingleOrDefault(); 
    if (appno == null)
    {
      InsertApplicationNo();  
    }
    else
    {
     ..
    }

如果没有结果,则返回 null。

您应该改用.Any()扩展方法:

dt.sys_Keys.Any(app.TableName == TableName && app.BranchNo.ToString() == BranchNo)

这将返回一个布尔值,因此您可以使用它轻松构建 if/else 块。

我认为这不是

在捕获部分中处理此问题的好方法。如果您遇到任何其他类型的异常怎么办?

尝试检查 if else 语句中是否存在 appno,而不是使用异常。

public void CheckApplicationNo(string TableName,string BranchNo)
    {
        try
        {
            var appno = (from app in dt.sys_Keys
                         where app.TableName == TableName && app.BranchNo.ToString() == BranchNo
                         select app.NewValue).SingleOrDefault();
            if(appno == null)
                InsertApplicationNo();
            else
            {
                Global.ApplicationNo = appno.ToString();
                UpdateApplicationNo("Data_Customer_Log", Global.BranchNo);
            }
    }
    catch (Exception ex)
    {

    }

}