2

オンラインでさまざまなソースを調べてまとめることができた次のコードがありますが、実際には下の行で null 参照例外がスローされます。

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 に関する私の経験はかなり限られています (特に述語式に関しては)。

上記のコードが最終的に null 参照例外をスローする理由について、誰かアイデアを提供してもらえますか? それ、または誰かが別の方法で必要なクエリをやってのけるのを手伝ってくれるなら(ただし、まだ述語式を使用しています)、私はそれを大いに感謝します.

私は明らかなことを行い、実行時に FetchEntityUsingUniqueConstraint(...) に送られるパラメータをチェックしましたが、どれもnullではありませんでした。

4

1 に答える 1

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);
于 2013-12-09T11:37:34.990 に答える