2013-11-22 3 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 (...) во время выполнения, и ни один из них не является нулевым.

ответ

3

Я не LLBLGen эксперт, но вы можете изменить PredicateExpression от:

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

с:

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

Другие операторы работают также. Null является DBNull.Value

Но я думаю, ваша проблема на самом деле в Prefetch, он должен выглядеть следующим образом:

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