2011-10-30 64 views
0

我已经形成了以下LINQ查询多发的条件,但它给错误LINQ加入

mcc_season不mcc_product属性

如何形成的查询在那里我有2个WHERE条件而无论是从不同的实体在加入

var guestCardProduct = 
      (from c in CrmOrgServiceContext.mcc_productpriceSet 
      join d in CrmOrgServiceContext.mcc_productSet 
      on c.mcc_product.Id equals d.mcc_productId 
      where d.mcc_producttype.Value == (int)mcc_product.mcc_producttypeOptionSet.GuestCard 
      && c.mcc_season.Id == seasonId 
      select new 
      { 
       d.mcc_productId, 
       c.mcc_price 
      }).FirstOrDefault(); 
+2

这个问题在这里并不完全清楚,因为你没有告诉我们你究竟想要做什么,或者你的实体是什么样子。如果'mcc_season'真*是任何类型'c'的属性,那么这个查询应该没问题,但我们不知道涉及的类型 - 我倾向于相信编译器。请阅读http://tinyurl.com/so-hints –

+0

您确定它没有说“mcc_season不是mcc_productpriceSet中的属性”吗?你有mcc_season和mcc_productPriceSet之间的外键映射吗? –

+0

请注意,不要将变量命名为'c'和'd'。 –

回答

0

您也许能够如下重新写它:

var guestCardProduct = 
      (from c in CrmOrgServiceContext.mcc_productpriceSet 
      where c.mcc_season.Id == seasonId 
      join d in CrmOrgServiceContext.mcc_productSet 
      on c.mcc_product.Id equals d.mcc_productId 
      where d.mcc_producttype.Value == (int)c.mcc_product.mcc_producttypeOptionSet.GuestCard 
      select new 
      { 
       d.mcc_productId, 
       c.mcc_price 
      }).FirstOrDefault(); 

我们在这里假设有1 - mcc_product和mcc_producttypeOptionSet之间0..1关系 - mcc_productpriceSet两者mcc_season和mcc_product,并且也是1之间0..1关系。如果你在这些关系中有1-n个关系,那么你将不得不通过这些关系而不是点入单个属性,因为你将拥有子对象集合而不是单个子对象。您可能会发现将查询分解为较小的部分以缩小问题的根源很有帮助。