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

キャッチセクションでこれを処理するのは良い方法ではないと思います。他の種類の例外が発生した場合はどうなりますか?

例外を使用する代わりに、appnoがifelseステートメントに存在するかどうかを確認してください。

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 に答える