0

抽象クラスから継承したさまざまなクラスのオブジェクトの束を格納しましたCreative。何が保存されているかを見たかったので、次のようなメソッドを書きました:

    public void GetCreativeTypes()
    {
        var types = from Creative c in original.AsQueryable<Creative>()
                    select string.Format("{0}: {1}", c.CreativeType, c.GetType());

        foreach (var type in types.Distinct())
        {
            Debug.WriteLine(type);
        }

        return;
    }

...しかし、これは結果を返しません。私も試しました:

    public void GetCreativeTypes()
    {
        var types = from Creative c in original
                    select string.Format("{0}: {1}", c.CreativeType, c.GetType());

        foreach (var type in types.Distinct())
        {
            Debug.WriteLine(type);
        }

        return;
    }

同じ結果で。どうすれば望む結果を得ることができますか?

元のコレクションのオブジェクトは次のようになります

public class ImageCreative : Creative{}
public class FlashCreative : Creative{}

...等。

4

2 に答える 2

1

あなたのクエリの代わりに、ここで何か他のことが起こっているのではないかと思います.たとえば、Debug.WriteLine(tryConsole.WriteLineと さえもTrace.WriteLine) が出力ウィンドウに出力されないか、コレクションが再作成されているか、最初にコレクションに追加する際に何か問題があります.

クエリに関しては、Linq-to-Objects を使用しているように見えるため、このクエリは問題なく、タイプを指定する必要はありません。

var types = from c in original 
            select string.Format("{0}: {1}", c.CreativeType, c.GetType()); 

AsQueryable()式やリモート データ ソースを操作する必要がないため、必要ありません。

これを行ったときに結果が得られるかどうかを確認することも良いでしょう:

Console.WriteLine(string.Format("Count: {0}", original.Count ()));

最後に、コレクションから特定の派生型にのみアクセスする必要がある可能性があるため、そのためのちょっとしたヒントを次に示します。

// returns only the objects in the collection that are type ImageCreative
var onlyImage = from c in original.OfType<ImageCreative>()
            select c; 

同様に、FlashCreative のみを取得するには、次のようにします。

// returns only the objects in the collection that are type FlashCreative
var onlyFlash = from c in original.OfType<FlashCreative>()
            select c; 
于 2012-08-09T22:50:06.627 に答える
0

クエリとは無関係であることが判明しました。ドキュメントには、レコードをコミットする必要はない(コンテナを閉じるだけ)と記載されていましたが、コミットするとクエリ可能になりました。それは私にとってヘッドスクラッチャーでした。

于 2012-08-10T11:33:40.413 に答える