【问题标题】:How do I perform a join or place a where clause on a relation or prefetch? (LLBLGen)如何在关系或预取上执行连接或放置 where 子句? (LLBLGen)
【发布时间】:2013-12-08 00:02:31
【问题描述】:

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

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。

【问题讨论】:

    标签: c# sql inner-join llblgen


    【解决方案1】:

    我不是 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);
    

    【讨论】:

    • 几周前我搬过去了,但如果我没记错的话,当我终于能够联系到我的老板时,他说我的预取是错误的。不幸的是,我不记得这段代码是用什么方法来 100% 验证你的答案代码的,但我很有信心你是对的,所以我接受你的答案。谢谢你。 :)
    猜你喜欢
    • 2014-09-25
    • 2016-02-25
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多