2016-06-14 4 views
0

Linqを使用してList<Application>をフィルタリングして、そのリスト内の2つのフィールドを連結して結果を返し、そのリストを呼び出し元のメソッドに戻す必要があります。IEnumerable <AnonymousType>をリスト<T>に変換する方法はありますか

Linqフィルタリングの結果はなので、返すことはできません。戻り値の型はList<Application>です。

私が最初に試すなかったことToListメソッドメソッドを使用してIEnumerableを変換することですが、それはコンパイラエラーがスローされます。

IEnumerable does not contain a definition for ToList() 

質問:

がどのように変換するかにIEnumerableををキャストすることができますリスト ?

コード:この割り当ては二つのフィールドを連結し、それをリストとして返すようにリスト上で行わ

:以下

   var filteredAppList = applicationList.Select(c => new { c.RID, RID_APP_FIELD = c.RID + " " + c.BusinessFriendlyName }); 

そして私はとしてのIEnumerableを返すようにしようとする方法ですリスト:

   return filteredAppList.ToList<Application>(); 
+0

なぜアプリケーションクラスに変換しようとしていますか? –

+2

あなたのオブジェクトはどれも* 'Application'オブジェクトではありません。それらは匿名型のインスタンスです。基本的に '.Select(x =>新しいアプリケーション{RID = x.RID、...})'などを手動で行うか自動化するか、 'Application'インスタンスが必要な場合、なぜ匿名型に切り替えるのですか? –

+0

'RID_APP_FIELD'は' Application'のプロパティですか?そうでない場合は、このようにToStringをオーバーライドする必要があります: 'return RID +" "+ BusinessFriendlyName'。次に、新しいインスタンスを作成する必要はありませんが、 'applicationList.Where(conditions).ToList()'を返すことができます。 –

答えて

3

問題は、以前のクエリが匿名のシーケンスを返し、あるオブジェクトの場合、これらをApplicationタイプに変換しようとしています。どちらが問題を引き起こしているのか試してみてください。

filteredAppList.Select(x=> new Application() 
          { 
           // set properties. 

          }) 
       .ToList(); 
+0

"RID + BusinessFriendlyName"という形式のリストを返す必要があります。その結果、フィルタリングされたリストは "879898 TestAppOne"のようになります。上記のプロパティを設定する方法の詳細はありますか? –

+0

'Application'クラスはどのように定義しますか?ここでアプリケーションプロパティを設定する必要があります。 –

1

あなたはあなたが単に匿名型は避けるべきApplicationオブジェクトを返す必要があることを知っている場合:

var filteredAppList = applicationList.Select(c => new Application { RID = c.RID, RID_APP_FIELD = c.RID + " " + c.BusinessFriendlyName }); 

return filteredAppList.ToList(); 

を私はあなたの匿名のタイプがあなたのApplicationタイプと厳密に同じであったと仮定し、それがないかもしれません事件である。中間ステップでは匿名型を引き続き使用できますが、ランタイムでは匿名型をApplicationに自動的に変換することはほとんどできません。したがって、必要な型のインスタンスに投影することは唯一の選択肢です。

var filteredAppList = applicationList.Select(c => new { RID = c.RID, RID_APP_FIELD = c.RID + " " + c.BusinessFriendlyName }); 

return filteredAppList.Select(anon => new Application { RID = anon.RID, OtherApplicationProperty = anon.RID_APP_FIELD }).ToList(); 
関連する問題