2

述語クエリの結果を使用して、Linq クエリで結合を記述しています。しかし、それは次のエラーをスローしています。ただし、SQL で同様のクエリを実行すると、期待される結果が返されます。

var predicate = PredicateBuilder.False<Product>();
foreach (var productId in productIds)
{
    var tempGuid = productId;
    predicate = predicate.Or(p => p.ProductId== tempGuid.ToString());
}

// This query is returning products back
var products = from p in context.ProductSet.AsExpandable().Where(predicate)
                           select p;

var accounts = (from a in context.AccountSet
                join cl in context.ContractDetailSet 
                on a.AccountId equals cl.AccountId.Id
                join p in products on  \\ From predicate query
                cl.ProductId.Id equals p.ProductId
                where a.StateCode == AccountState.Active                    
                select a).ToList();

注:最後に ToList() を削除したため、エラーはスローされませんが、アカウント オブジェクトを使用しようとすると、同じエラーが再びスローされます。

エラー

タイプ 'System.NullReferenceException' の例外が Microsoft.Xrm.Sdk.dll で発生しましたが、ユーザー コードでは処理されませんでした。

追加情報: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

4

1 に答える 1

2

以下は私にとって完全に機能LinqQueryExpressionます。

var qe = new QueryExpression {EntityName = "account", ColumnSet = new ColumnSet()};
qe.ColumnSet.Columns.Add("name");

qe.LinkEntities.Add(new LinkEntity("account", "contractdetail", "accountid", "accountid", JoinOperator.Inner));
qe.LinkEntities[0].Columns.AddColumns("productid", "title");
qe.LinkEntities[0].EntityAlias = "contractdetails";

// Check Account State
FilterExpression accountState = qe.Criteria.AddFilter(LogicalOperator.And);
accountState.Conditions.Add(new ConditionExpression("statecode", ConditionOperator.Equal, 0));

FilterExpression productFilter = qe.LinkEntities[0].LinkCriteria.AddFilter(LogicalOperator.Or);
foreach (var product in products)
{
    var condition = new ConditionExpression
    {
        AttributeName = "productid",
        Operator = ConditionOperator.Equal
    };
    condition.Values.Add(product.ProductId);
    productFilter.Conditions.Add(condition); 
}                

EntityCollection resultsCollection = _OrgService.RetrieveMultiple(qe);

詳細についてはQueryExpression、以下のリンクを確認してください。

  1. QueryExpression で複数取得する
  2. 条件式を使用する
于 2015-06-12T14:51:46.827 に答える