2012-05-17 62 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

相關問題