微风查询:比较于相关实体两列

问题描述 投票:0回答:1

使用微风,我怎么能对一个实体的相关属性比较两列?

 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没有正确评估,它搜索属性TableCEntityTableA而不是在TableB。如果我改变subpredicate到

var subpredicate = Predicate.create('TableCEntity.columnA', FilterQueryOp.Equals, 'asamplevalue');

然后,QUERY2作品找到。这是行不通的谓词的右侧是一个创纪录的专栏。

我在做什么错误的,这是一个错误?

one-to-many breeze predicate one-to-one
1个回答
0
投票

微风“任意”和“所有”运营商要求,通过(在下面的例子中“指令”)的第一个表达式返回的属性是一个非标量导航属性。即返回集合的导航属性。所述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的名字与更直观一点,并以复数集合属性名表名。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.