2011-05-31 256 views
0

所以我嘗試將SQL轉換爲LINQ查詢LINQ查詢複雜的聯接問題

的邏輯是:

JOIN SalesPeriod SP1 
    ON 
    SP1.SalesPeriodId = SE1.SalesPeriodId AND SP1.SalePeriodId = .....(XML stuff) 

但它一直在兩側抱怨的類型等於聲明不匹配

任何想法?

注:我宣佈b和d,因爲它不接受匿名類型成員 和我分別測試了兩個相等的條件下,他們都工作

感謝

join SP1 in fentities.SalesPeriods 
       on new { SE1.SalesPeriodId, b = XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() } 
       equals new { SP1.SalesPeriodId, d = SP1.SalesPeriodId.ToString() } 

回答

3

簡單,他們不是相同(兼容)類型。第一個密鑰的類型爲any的SalesPeriodId,以及字符串類型的b。第二個密鑰的類型爲SalesPeriodId(可能與第一個相同),以及字符串類型爲d。你不能比較這些彼此。它必須必須具有相同的順序聲明相同類型的屬性。只需選擇其中一個名稱bd並使用該名稱即可。

... 
join SP1 in fentities.SalesPeriods 
    on new { SE1.SalesPeriodId, b = XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() } 
    equals new { SP1.SalesPeriodId, b = SP1.SalesPeriodId.ToString() } 
+0

非常感謝! – JayX 2011-05-31 20:08:18

1

你的兩個匿名類型不匹配,b & d要具體..嘗試對準簽名..

join SP1 in fentities.SalesPeriods 
      on new { SE1.SalesPeriodId, b = XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() } 
      equals new { SP1.SalesPeriodId, b = SP1.SalesPeriodId.ToString() } 

在該示例中匿名對象將具有相同的屬性定義(SalesPeriodIdb

+0

感謝您的回答,它確實有幫助! – JayX 2011-05-31 20:08:00

0

不要停留在將'ON'條件中的完整連接條件。將兩個部分分開,將其中一個放入'ON'子句中,另一個放入'WHERE'子句中。

join SP1 in fentities.SalesPeriods 
      on SE1.SalesPeriodId equals SP1.SalesPeriodId   
    where XDocument.Load(MI.Body).Element("ns:Transfer").Element("ns:ReceivedBy").Element("ns:Id").FirstNode.ToString() == SP1.SalesPeriodId.ToString()