2012-05-17 35 views
1

我有一个特殊的函数,它检查一个特定的行是否与查询条件匹配。如果是,那么我检索该值并将其存储在我的变量中,如果它没有我插入它的值。但是我有一个try {} catch {}块,它确定它是否存在。如果它进入catch块,我调用一个将在该表中插入记录的函数,想知道的是这个方法好,调用catch块中的功能,那是正确的,什么是找出是否我的查询返回的结果或not.Here是我的代码确定一个特定的查询是否产生任何结果或使用Linq有任何结果

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(); 
     } 


    } 

任何suggestons是替代品欢迎。 谢谢。

回答

2

您应该使用.SingleOrDefault()

select app.NewValue).SingleOrDefault(); 

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

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

+0

不会把它给错误,如果没有结果,你能解释的SingleOrDefault()一bit.Thanks – freebird

+1

的SingleOrDefault是一样的单不同的是它在没有结果不会抛出异常,而是返回默认值(大部分时间为空) – Pleun

+0

太棒了,这意味着如果没有找到rsults,我会返回一个null,对,谢谢 – freebird

1

您应该使用.Any()扩展方法代替:

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

这将返回一个布尔值,这样你就可以轻松地使用它建立一个if/else块。

+0

这将工作,但它需要一个额外的查询,而SingleOrDefault将在一个中做所有事情。 – Pleun

+0

@MarcinJuraszek,你是否同意Pleun的说法,哪种方法更好,谢谢 – freebird

+1

如果你需要'appno.ToString()'执行更新'SingleOrDefault',那么这将是更好的选择。从进一步的代码中,这个ApplicationNo永远不会被使用,所以我不确定这对你是否有必要。 – MarcinJuraszek

1

我认为这不是一个很好的方法来处理这个捕获部分。如果您遇到其他类型的异常,该怎么办?

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

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) 
    { 


    } 


} 
+0

谢谢,你不觉得如果没有结果,它会进入catch块,然后我不能插入记录。 – freebird

+0

因为我已经将SingleOrDefault添加到查询中;它只会返回null,如果没有结果并且不会有异常,那么可以使用catch块的目的,只是处理异常。 – daryal

+0

感谢让我理解这一点,非常感谢。 – freebird

相关问题