2016-06-20 22 views
1

データベースから、私はSystem.Collections.Generic.IEnumerable<CustomObject>という結果を得ています。結果をList<CustomObject>に入れると、完璧に動作します。今では最初のn個のオブジェクトだけを取りたいと思っています。これは私が試したものです:私はSystem.Collections.Generic.IEnumerableから最初のn個の要素を取ります

Error CS0266 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<CustomObject>' to 'System.Collections.Generic.List<CustomObject>'. An explicit conversion exists (are you missing a cast?) 

を取得する2行目

List<CustomObject> tempList = DataBase.GetAllEntries().Cast<CustomObject>().ToList(); 
tempList = tempList.Take(5); 

を私はまた、OrderBy()を追加(キャストなし)のみToList()を使用するか、またはそれらの組み合わせしようとしたが、毎回I上記のエラーを取得します。私は何を変えるべきですか?

+2

'tempList'はリストなので、' ToList'を使用する必要があります。 'Take'は' IEnumerable'を返します。より良いことに、最初の行の 'Cast'と' ToList'の間に追加するだけです。 – juharr

+0

@juharr:ありがとう。質問を削除するか、回答を投稿したいですか? – testing

+0

テンポラリをIEnumeable として宣言する – Evk

答えて

3

マテリア前Takeを入れて(ToList ):

List<CustomObject> tempList = DataBase.GetAllEntries() 
    .Take(5) 
    .Cast<CustomObject>() 
    .ToList(); 

最終操作。

2

あなたの問題はtempListList<CustomObject>であるということですが、IEnumerable<CustomObject>.Take()返します。あなたは再び.ToList()を呼び出すだけで、それを修正することができます:

また
tempList = tempList.Take(5).ToList(); 

、あなたは2つのリストを構築避けるために、あなたの元のクエリで.Take()メソッドを追加することができます。

List<CustomObject> tempList = DataBase.GetAllEntries().Take(5).Cast<CustomObject>().ToList(); 
+0

2つのリストを作成するのはなぜですか?最初の行のtolistの前にTask(5)をインラインでインラインで置き換える場合は、 – CharlesNRice

+0

@CharlesNRice私はそれが良いと同意します。私はちょうど質問に対処しようとしていた。私は答えを高めるために代替案を追加します。 – itsme86