0

假设我们有一个非抽象基类 A,它有一个专门的类 B。我现在想做一个查询,只返回 A 的实例,而不是 B。这可以实现吗?

4

1 回答 1

0

编辑2

Starcounter 实现了operator IS,它允许检查一个对象是否属于给定的类型。但是,检查包括儿童,因此无济于事。缺少运算符的实现IS NOT,这是我在最新版本的 Starcounter 中测试后发现的。Starcounter 的问题跟踪器中有一张关于此的

所以问题的答案是:在当前版本的 Starcounter 中,如果不使用 SQL 选择子类的对象,就不可能选择基类的对象。在对查询结果进行迭代期间,必须在 C# 中实现过滤器。过滤掉以下对象的应用程序示例B

using System;
using Starcounter;

class Program {
    static void Main() {
        Db.Transact(delegate {
            new A { name = "a1" };
            new B { name = "b1" };
        });
        foreach (A a in Db.SQL<A>("SELECT a FROM A a"))
            if (!(a is B))
                Console.WriteLine(a.name);
    }
}

[Database]
public class A {
    public String name;
}

public class B : A {
}

程序第一次执行的结果是:

a1 
于 2015-05-28T09:39:27.350 回答