使用微风,我怎么能对一个实体的相关属性比较两列?
public class TableA{
public ICollection<TableB> TableBEntity {get; set;}
}
public class TableB{
public TableC TableCEntity {get; set;}
}
public class TableC {
public string columnA { get; set;}
public string columnB { get; set;}
}
var subpredicate = Predicate.create('TableCEntity.columnA', FilterQueryOp.Equals, 'TableCEntity.columnB');
var predicate = Predicate.create('TableBEntity', FilterQueryOp.Any, subpredicate);
var query1 = EntityQuery.from('TableB')
.where(subpredicate);
var query2 = EntityQuery.from('TableA')
.where(predicate );
上述QUERY1执行没有错误。然而QUERY2给我的错误:
在URI中指定的查询无效。找不到一个叫上键入“表A” TableCEntity'属性。
这似乎为subpredicate没有正确评估,它搜索属性TableCEntity
上TableA
而不是在TableB
。如果我改变subpredicate到
var subpredicate = Predicate.create('TableCEntity.columnA', FilterQueryOp.Equals, 'asamplevalue');
然后,QUERY2作品找到。这是行不通的谓词的右侧是一个创纪录的专栏。
我在做什么错误的,这是一个错误?
微风“任意”和“所有”运营商要求,通过(在下面的例子中“指令”)的第一个表达式返回的属性是一个非标量导航属性。即返回集合的导航属性。所述subpredicate然后仅仅是针对由所述第一表达式返回的类型的简单谓词。
var query = EntityQuery.from("Employees")
.where("orders", "any", "freight", ">", 950);
与谓词这将被表示为
var p2 = Predicate.create("freight", ">", 950);
var p1 = Predicate.create("orders", "any", p2);
var query = EntityQuery.from("Employees").where(p1);
在你的情况,我不知道你正在尝试用你的“QUERY2”做。 “QUERY2”似乎已经过去的一集“表B”实体从“表A”返回的查询,但“表C”实体“subpredicate”交易。
如果这没有帮助,可能更容易协助,如果你能重申你的表A,B和C的名字与更直观一点,并以复数集合属性名表名。
希望这可以帮助。