db4o:查询抽象类类型:无结果

时间:2012-08-09 17:32:56

标签: c# linq db4o

我存储了一堆从抽象类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{}

...等

2 个答案:

答案 0 :(得分: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; 

答案 1 :(得分:0)

结果与查询无关。文档声明记录不需要提交(只是关闭容器),但是一旦我提交它们就可以查询。那对我来说是一个头脑风暴。