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{}

...ETC。

4

2 回答 2

1

我怀疑这里还有其他事情而不是您的查询,例如Debug.WriteLine(尝试Console.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 回答