1

我有一个特定的函数来检查特定行是否与查询条件匹配。如果匹配,那么我检索该值并将其存储在我的变量中,如果它没有值我插入它。但是我有一个 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(); 
        }


    }

欢迎任何建议。谢谢。

4

3 回答 3

2

你应该使用 .SingleOrDefault()

select app.NewValue).SingleOrDefault(); 

    if (appno == null)
    {
      InsertApplicationNo();  
    }
    else
    {
     ..
    }

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

于 2012-05-17T06:51:17.063 回答
1

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

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

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

于 2012-05-17T06:51:41.600 回答
1

我认为这不是在 catch 部分处理这个问题的好方法。如果您遇到任何其他类型的异常怎么办?

尝试检查 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)
    {


    }


}
于 2012-05-17T06:51:55.253 回答