0

全部,

此问题与 Dynamics CRM 2011 Linq 提供程序有关 - 它确实有很多怪癖。但是,我没有标记它,因为我认为这是一个一般的 Linq 问题。

我有一门课——产品。它有一个 Price 类型的属性(比如 ProductPrice)。

我正在 Linq 中对此进行外部联接。CRM 文档说外部连接是不可能的,但它似乎工作(我在这里问的明显问题)。

所以说我正在做类似的事情:(为伪 linq 道歉)

        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,而不是“空白”对象。

这怎么可能?

我通过测试空白价格名称来解决它 - 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 回答
0

crm 2011 linq 不支持外连接。如果您尝试 Amiram 的代码 - 在评估选择时,您将收到错误“产品不包含属性“pricevalue””。

于 2013-04-02T08:06:22.917 回答