0

すべて、

この問題は、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のようなことができるといいでしょう。何か案は?

4

2 に答える 2

1

結合をスキップできます:

from p in xrmContext.Products 
let price = xrmContext.Prices.FirstOrDefault(pr => pr.ProductID == p.ProductID)
select new Product()
{ 
    ProductName = p.productName,
    ProductPrice = price != null ? new Price() { Amount = price.PriceValue } : null
}
于 2012-08-11T21:36:08.053 に答える