2016-07-13 5 views
-4
このコードを少しリファクタリングを行うことが可能である場合、私は知りたいのですが

ファクタリングコードC#のLINQ

string code_region = ""; 
code_region = listeRegions.Single(x => x.nom == nvc[index + 1]).code_region; 
dt.code_region=code_region; 

このコードでは、NVC [インデックス+ 1]の値がそう私はnullまたは空にすることができます私のLinqクエリが例外を発生させたくない...

インラインLINQクエリを実行する方法があるのだろうか?代わりにFirstOfDefaultを使うべきですか?あなたの助けを事前に

感謝:)

+1

これは、コードレビューに属しジョンスキートが直接私のコメントの下にコメントしていない限り、あなたは、そこにはるかに優れたレスポンスを得るでしょう。 – Adam

+0

マッチがない場合はどうしますか?なぜ、最初の行で 'code_region'に値を代入していますか?それを再割り当てするだけですか? (私は、あなたの名前を.NETの命名規則に従うように改訂することを強くお勧めします。) –

+0

@JonSkeet:そうです、変数名は正しいですが、これはほんの一例で、もしあれば空の値を返したい一致するものはありません... – Jeff

答えて

1

コメントから、あなたは、インデックスが範囲内にあることを確認してくださいように見えるので、あなただけが見つからないときに発生します例外を解決するために探しています一致。

SingleOrDefaultはデフォルト(nullの場合)を返しますので、これを使用してnullをチェックし、結果がある場合はcode_regionを返します。

ただし、最後までモナドを離れることはありません。 WhereSelectを使用して条件でフィルタリングし、その項目のcode_regionを選択し、SingleOrDefaultに電話してください。この方法で一致する商品code_regionを取得するか、条件に一致する商品がない場合はnullが返されます。

var code_region = listeRegions 
    .Where(x => x.nom == nvc[index + 1]) 
    .Select(x => x.code_region) 
    .SingleOrDefault(); 
0

砂の私の2粒:

// Convert to string to let it work against an SQL database 
var nvcStr = nvc[index + 1]; 

// Avoid exception if no match - FirstOrDefault 
var code_region_obj = listeRegions.FirstOrDefault(x => x.nom == nvcStr); 
dt.code_region=code_region_obj == null?string.empty:code_region_obj.code_region; 
+0

ありがとう@ジョージそれです! 3行目の最終構文は次のとおりです。dt.code_region = code_region_obj == null? string.Empty:code_region_obj.code_region; – Jeff

+0

はい、タイプミス:私はそれを修正します! –