假设我们有一个非抽象基类 A,它有一个专门的类 B。我现在想做一个查询,只返回 A 的实例,而不是 B。这可以实现吗?
问问题
59 次
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 回答