2010-12-13 5 views
2

申し訳ありません、私はちょうどLINQをピックアップし、比較的新しいです。このコードをLINQに変換しますか?

以下をLINQに変換することはできますか?

foreach (DataRow row in results.Rows) 
    { 
     if (row["REMARKS"].ToString() == "Passes" || row["REMARKS"].ToString() == "Promoted") 
     { 
      result = String.Concat(result,row["ROLL_NO"].ToString()," "); 
     } 
    } 
+0

おかげでみんな...それは私が私の答えよりも良い、これを好き –

答えて

5

私達はちょうどスペースで区切られたリストが欲しいresultの初期値は、これはトリッキーになりこれが何であるかを知っているが、実際にあなたを想定していない、私はこれを行うだろう。

var query = from DataRow row in result.Rows 
      let remarks = row["REMARKS"].ToString() 
      where remarks == "Passes" || remarks == "Promoted" 
      select row["ROLL_NO"].ToString(); 

string results = string.Join(" ", query); 

は(DataTableが、私は明示的に型指定された範囲の変数を使用してきた理由である、IEnumerable<DataRow>を実装していないことに注意してください。代替はresult.Rows.AsEnumerable()を呼び出し、を作ることであろう最終的な行は、以前のバージョンよりもstring.Joinのオーバーロードが多い.NET 4を前提としています。そうでなければ、これはそれを行うだろう:あなたはLINQを使用している場合

string results = string.Join(" ", query.ToArray()); 

もちろん、あなたは十分で始まり、SQL、Entity Frameworkの、NHibernateはまたはのいずれかにLINQを使用するように離れてDataTableなどから移動することもできます利用可能な他のオプション:)

+0

+1:神様が質問を整理するために「let」を使用します。 –

+0

うん..これは読みやすい、私は最初linqにシフトしたかった理由です。ありがとうジョン!ところで、Datatableなどから離れていくとどういう意味ですか? –

+0

私は、データを取得するためにDataTableを使用するのではなく、後でそれを処理するLINQではなく、LINQ to SQLに移行することを意味します。純粋なLINQ to SQLは、このすべてのことをさらに読みやすくし、実際にデータをデータテーブルにフェッチするためのコードを生成できるようにします。 –

2
results.Rows 
     .Cast<DataRow>() // If you need this line or not depends on the type of result.Rows 
     .Where(row => row["REMARKS"].ToString() == "Passes" || 
        row["REMARKS"].ToString() == "Promoted") 
     .Aggregate(result, (acc, row) => String.Concat(acc, row["ROLL_NO"].ToString()," ")) 
+0

...皆さん、あなたの本当に速かった、それは純粋なLINQの実装 – Rony

1
result = results.Rows.Cast<DataRow>().Where(row => row["REMARKS"].ToString() == "Passes" || row["REMARKS"].ToString() == "Promoted").Aggregate(result, (current, row) => String.Concat(current, row["ROLL_NO"].ToString(), " ")); 
+0

+1である - この作品COS、しかし、私そのシンプルさと可読性のために本当にjonsが大好きです! –

+0

+1に感謝します。私は同意する、ジョンは非常に読みやすいです。 – jvanrhyn

0
string.Join(" ", result.Rows.Cast<DataRow>().Where(r => r["REMARKS"].ToString() == "Passes" || r["REMARKS"].ToString() == "Promoted").Select(r => r["ROLL_NO"].ToString()).ToArray()); 
+0

これはコンパイルされません。 'キャスト'を呼び出すか、 'Rows.AsEnumerable()'を使用する必要があります。 'DataTable'は' IEnumerable 'を実装していません。 –

+0

はい、それは本当です – Rony

関連する問題