すべて、
この問題は、Dynamics CRM2011Linqプロバイダーに関連しています。このプロバイダーには多くの癖があります。ただし、これは一般的なLinqの質問だと思うので、タグを付けていません。
私はクラス製品を持っています。これには、Priceタイプのプロパティ(ProductPriceなど)があります。
私はLinqでこれに外部結合を行っています。CRMのドキュメントには、外部結合は不可能であると記載されていますが、機能しているようです(ここで尋ねている明らかな問題があります)。
だから私が次のようなことをしていると言う:(疑似リンクの謝罪)
IList<Product> products = (from p in xrmContext.Products
join pr in xrmContext.Prices
on p.ProductId equals pr.ProductId into prx from prices in prx.DefaultIfEmpty
select new Product { ProductName = p.productName, ProductPrice = new Price { Amount = prices.PriceValue }).ToList();
これはある程度うまく機能します。価格オブジェクトがあるかどうかに関係なく、すべての製品が作成されます。ティッペティトップ。
問題はDefaultIfEmptyです。製品に価格がないかどうかは間違いないので、このDefaultIfEmptyは「デフォルト」の価格オブジェクトを作成します...つまり、null値を持つオブジェクトです。私が実際に欲しいのは、価格オブジェクトではありません。つまり、「空白」オブジェクトではなく、nullです。
そんなことがあるものか?
空白の価格名をテストすることで回避しました-ProductPrice=price.priceName == ""?null:新しい価格..。
NullIfEmptyのようなことができるといいでしょう。何か案は?