2013-11-22 71 views
2

我有下面的代碼,我已經能夠湊齊在一起看在線一堆不同的來源,但是下面實際上拋出一個空引用異常的底線。如何執行聯接或在關係或預取中放置where子句? (LLBLGen)

GroupAgentEntity agent = new GroupAgentEntity(); 

RelationPredicateBucket pred = new RelationPredicateBucket(); 
pred.PredicateExpression.Add(PredicateFactory.CompareValue(GroupAgentFieldIndex.GroupId, ComparisonOperator.Equal, groupId)); 
pred.PredicateExpression.Add(PredicateFactory.CompareValue(GroupAgentFieldIndex.IsPrimary, ComparisonOperator.Equal, true)); 
pred.PredicateExpression.Add(PredicateFactory.CompareValue(GroupAgentFieldIndex.BeginDate, ComparisonOperator.LessEqual, DateTime.Now)); 
pred.PredicateExpression.Add(PredicateFactory.CompareNull(GroupAgentFieldIndex.EndDate)); 

pred.Relations.Add(GroupAgentEntity.Relations.AgentSplitGroupEntityUsingAgentSplitGroupId); 

IPredicateExpression preFilter = new PredicateExpression(AgentSplitGroupFields.Name == "Broker"); 

PrefetchPath2 pre = new PrefetchPath2((int)EntityType.AgentSplitGroupEntity); 
pre.Add(AgentSplitGroupEntity.PrefetchPathAgentSplitGroup, 0, preFilter); 

if (deep) 
{ 
    pre.Add(GroupAgentEntity.PrefetchPathBroker); 
    pre.Add(GroupAgentEntity.PrefetchPathCarrierBroker); 
} 

this.DataAdapter.FetchEntityUsingUniqueConstraint(agent, pred.PredicateExpression, pre); 

什麼我試圖做的是從GroupAgent表到AgentSplitGroup表連接以及預取類型AgentSplitGroupEntity的實體。不幸的是,我的LLBLGen經驗相當有限(尤其是涉及謂詞表達式時)。

任何人都可以請提供任何想法,爲什麼上面的代碼在底線上拋出空引用異常?如果有人能夠幫助我以另一種方式(但仍然使用謂詞表達式)來實現我需要的查詢,我將非常感激。

請注意,我做了明顯的事情,並檢查參數去運行時FetchEntityUsingUniqueConstraint(...),並沒有一個是null。

回答

3

我不是專家LLBLGEN但可以改變你的PredicateExpression:

pred.PredicateExpression.Add(PredicateFactory.CompareValue(GroupAgentFieldIndex.GroupId, ComparisonOperator.Equal, groupId)); 

有:

pred.PredicateExpression.Add(GroupAgentFields.GroupId == groupId); 

其他運營商的工作也。空是DBNull.Value

但我認爲你的問題實際上是在預取,它應該是這樣的:

RelationPredicateBucket preFilter = new RelationPredicateBucket(); 
preFilter.Relations.Add(GroupAgentEntity.Relations.AgentSplitGroupEntityUsingAgentSplitGroupId); 
preFilter.PredicateExpression.Add(AgentSplitGroupFields.Name == "Broker"); 
PrefetchPath2 pre = new PrefetchPath2((int)EntityType.AgentGroupEntity); 
pre.Add(AgentGroupEntity.PrefetchPathAgentSplitGroup, 0, preFilter.PredicateExpression, preFilter.Relations); 
+2

我幾個星期前移過這一點,但如果我沒有記錯,當我終於能得到抱着我的老闆,他說我的預取錯誤。不幸的是,我不記得這個代碼是用什麼方法來驗證你的答案代碼是100%,但我很自信你是對的,所以我接受你的答案。謝謝。 :) – KSwift87

相關問題