2013-05-01 56 views
3

我正嘗試使用Orchard HQL API在兩個不同表之間進行簡單連接。問題是其中一個表不是ContentPartTable。這可能嗎??使用Orchard HQL API將非ContentPart表加入ContentPart表

下面是它看起來像在普通的SQL:

Select * From ItemPartRecord 
Join ItemRecord 
On ItemRecord.ItemId = ItemPartRecord.ItemId 
Where ItemRecord.Price Between 1000 and 10000 

我究竟怎麼會去這樣做呢?

回答

1

如果你想知道如何做到這一點:

//Join the non content part table 
var defaultHqlQuery = query as DefaultHqlQuery; 
var fiJoins = typeof(DefaultHqlQuery).GetField("_joins", BindingFlags.Instance | BindingFlags.NonPublic); 
var joins = fiJoins.GetValue(defaultHqlQuery) as List<Tuple<IAlias, Join>>; 
joins.Add(new Tuple<IAlias, Join>(new Alias("ExampleNamespace.Data.Models"), new Join("ExampleRecord", "ExampleAlias", ","))); 
Action<IHqlExpressionFactory> joinOn = predicate => predicate.EqProperty("valueToJoinOn", "aliasToJoinOn.valueToJoinOn"); 
query = query.Where(
alias => alias.Named("ExampleAlias"), 
joinOn 
); 
+1

您使用反射來獲取進入私人領域「_joins」這實際上是一個不好的做法,不是嗎?該領域是私人的原因。 – 2016-08-12 10:43:54

+0

這是真的,果園HQL API通常很難使用,它只公開特定於果園內容部分記錄的方面,因爲它們實際上是sql表,這就是爲什麼我相信我做到了這一點。 – 2016-09-01 15:45:03