2012-03-30 12 views
1

タイプIQueryable<ClassX>のオブジェクトを返すLinqクエリがあります。私はクラス型ClassXのオブジェクトにこのオブジェクトを配置すると、エラーを取得:タイプ 'System.Linq.IQueryable <ClassX>'から 'ClassX'に変換する際のエラー

Cannot implicitly convert type 'System.Linq.IQueryable<ClassX>' to 'ClassX' . An explicit conversion exists (are you missing a cast?)

は、これは私がやろうとしているものです:
IQueryable<ClassX>オブジェクトを返しますGetResult()

ClassX x = GetResult(); 

ClassX x = (ClassX)(GetResult());などのキャストを試みましたが、機能しませんでした。

+1

'IQueryable 'は、 'T'型のインスタンスを0個、1個、または多く返すクエリを表します。このように、 'T '型の変数に入れようとするのは意味をなさない - これに対処する方法については、いろいろな答えが投稿されている。 –

+0

説明をありがとう!私はLinqで新しいです。(+1) – user990635

答えて

4

は、あなたのLINQクエリはIQueryable<ClassX>を返します。これは結果セットを持つクエリを表します。結果自体の中のオブジェクトを表現するものではないので、そのようにキャストすることはできません。

あなたの方法は、正確に1 ClassXオブジェクトを返します場合は、結果セットから、そのオブジェクトをつかむために.Single()を使用することができます。結果セットが空である可能性がある場合

ClassX x = GetResult().Single(); 

または.SingleOrDefault()

ClassX x = GetResult().SingleOrDefault(); 
2

IQueryableはオブジェクトの「コレクション」なので、「コレクション内の要素の型アイテム」に割り当てるには、単一のアイテムを選択する必要があります。

あなたが最初に必要なものに応じて、SkipFirstOrDefaultはあなたのIQueryable/IEnumerableをから項目を選択してみましょうう:あなたはおそらく認識しているとして

ClassX x = GetResult().FirstOrDefault(); 
0
var temp = GetResult().AsEnumerable().SingleOrDefault(); 
関連する問題