2

我有以下代码,我可以通过在线查看一堆不同的资源来拼凑起来,但是下面的代码实际上在底线引发了一个空引用异常。

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(...) 的参数,它们都不是空的。

4

1 回答 1

3

我不是 LLBLGen 专家,但您可以从以下位置更改 PredicateExpression:

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

和:

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

其他操作员也可以工作。空是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);
于 2013-12-09T11:37:34.990 回答