所有
此问题与Dynamics CRM 2011 Linq提供程序有关 - 它确实有很多怪癖。但是,我没有标记它,例如我认为这是一个普通的Linq问题。
我有一个类 - 产品。它有一个属性(比如ProductPrice),类型为Price。
我正在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();
这很有用。它创造了所有产品,无论它们是否具有价格对象。 Tippety顶部。
问题是DefaultIfEmpty。毫无疑问,如果产品没有价格,DefaultIfEmpty会创建一个默认的&#39;价格对象...即具有空值的对象。我实际上想要的是没有价格对象 - 即空,而不是空白&#39;对象
这怎么可能?
我通过测试空白价格名称来解决这个问题 - ProductPrice = price.priceName ==&#34;&#34; ? null:新价格......
能够做一些像NullIfEmpty这样的事情会很棒。有什么想法吗?
答案 0 :(得分: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
}
答案 1 :(得分:0)
crm 2011 linq不支持外连接。 如果您尝试Amiram的代码 - 在评估选择时,您将收到错误“产品不包含属性”pricevalue“”。