0

作成したリストから特定の x アイテムを取得しようとしています。

List<Item> il = (List<Item>)(from i in AllItems
                             where i.Iid == item.Iid
                             select i).Take(Int32.Parse(item.amount));

次のエラーが表示されます。

「タイプ 'd__3a`1[AssetManagement.Entities.Item]' のオブジェクトをタイプ 'System.Collections.Generic.List`1[AssetManagement.Entities.Item]' にキャストできません。」

どうすれば修正できますか、なぜこれが起こっているのですか?

4

3 に答える 3

5

KingKingが正しく指摘したように、最後に「.ToList()」呼び出しがありません。それがなければ、そのクエリは List にキャストできない IQueryable になります。

サイド ノードとして、次のような暗黙の変数型宣言を使用することをお勧めします。

var il = (from i in AllItems
    where i.Iid == item.Iid
    select i).Take(Int32.Parse(item.amount)).ToList();

このようにすると、「ToList」がなくても例外はスローされませんでした (ただし、期待したものではなかった可能性があります)。

于 2013-08-26T21:58:09.033 に答える
3
List<Item> il = (from i in AllItems
                 where i.Iid == item.Iid
                 select i).Take(Int32.Parse(item.amount)).ToList();

Inheritance: キャストは、 orImplementation関係を持つオブジェクト間でのみ実行できます。それを覚えてみてください。

于 2013-08-26T21:54:09.633 に答える
3

この構文は読みやすくありませんか? (クエリとの唯一の違いはToList())

List<Item> il = AllItems.Where(i => i.Iid == item.Iid)
                        .Take(Int32.Parse(item.amount))
                        .ToList();

括弧を使用してクエリを具体化するのは好きではありませんでした(from..where..select).ToList();

于 2013-08-26T21:59:23.333 に答える