2012-04-26 7 views
0

にLINQを使用した後に、私は、次のLINQクエリ鋳造のDataSet

var results = from myRow in QCAllDataSet.DataTable1.AsEnumerable() 
             where myRow.Field<String>("ESRNumber") == value 
             select new ESR(myRow.ESRNumber, 
                  myRow.CreationDate, 
                  myRow.Subsystem, 
                  myRow.Name, 
                  myRow.Product, 
                  myRow.Version, 
                  myRow.ESRStatus, 
                  myRow.Owner, 
                  myRow.Priority, 
                  myRow.LastPHNote, 
                  myRow.LastPHNoteDate, 
                  myRow.LastPHNoteUser, 
                  myRow.DaysFromLastUpdate, 
                  myRow.Customer, 
                  myRow.T2Owner, 
                  myRow.T2Group, 
                  myRow.comment, 
                  myRow.ESRAge); 

を行なったし、私はresultsオブジェクトESR

somthigようESR t=(ESR)results

を変換したいと思いますが、私は次のエラーを取得します:

Cannot convert type 'System.Data.EnumerableRowCollection to ESR

私はこれをキャスするか?

答えて

1

LINQでselectを使用すると、1つの結果しか取得しない場合でも、コレクションが返されます。それはおそらく何の結果(試合なし)を返すことができなかった場合、あなたはSingleOrDefault()を使用することができますし、nullをチェック

ESR t = results.Single(); 

ESR t = results.SingleOrDefault(); 
if (t == null) 
    // could not find match 
1

FirstOrDefaultを使用して結果から1つの項目のみを取得します。

var esrObject= (from myRow in QCAllDataSet.DataTable1.AsEnumerable() 
where myRow.Field<String>("ESRNumber") == value 
    select new ESR(myRow.ESRNumber, 
        myRow.CreationDate, 
        myRow.Subsystem)).FirstOrDefault(); 

あなたのコレクションはFirstOrDefaultを使用それ以外の場合は、1つのレコードのみを返すと確信しているときは、SingleOrDefaultを使用することができます。 FirstOrDefaultはシーケンスの最初の要素を返します。シーケンスに要素がない場合はデフォルト値を返します。したがって、コレクション式が複数の行を返す場合でも、心配する必要はありません。

1

Enumerable<T>を単一の結果を示すには、Single() LINQメソッドを使用します1つしか含まれていない場合でも、単一のオブジェクトではありません。あなたは何をしたいのかを指定する必要があります。

何をしたい可能性が高いです

  • SingleまたはSingleOrDefaultある
  • ToListまたはToArrayextension methods in Enumerableの多くは次のようにあります。 :

    あなたが原因LINQのdeferred executionforeach to iterate them)を次のいずれかの方法を呼び出す(または使用するまで、クエリが実行されていないことを

    注意