對不起,如果我的問題沒有太大意義。讓我解釋。LINQ使用擴展方法語法在不同記錄的多列上加入
我有一個現有的SQL查詢如下:
SELECT
T1.Portfolio, T1.ValueDate as CurrentValueDate,
T1.DifferencePercent as CurrentDP,
T2.ValueDate as PreviousValueDate,
T2.DifferencePercent as PreviousDP,
CASE
WHEN T1.DifferencePercent = T2.DifferencePercent
THEN 1
ELSE 0
END as IsChange
FROM
[AccountingData].[dbo].[NAVRec_NAVSummary] T1
JOIN
[AccountingData].[dbo].[NAVRec_NAVSummary] T2 ON T1.Portfolio = T2.Portfolio AND T2.ValueDate = DATEADD(DAY, CASE DATENAME(WEEKDAY, T1.ValueDate) WHEN 'Sunday' THEN -2 WHEN 'Monday' THEN -3 ELSE -1 END, DATEDIFF(DAY, 0, T1.ValueDate))
所以基本上,我很感興趣的投資組合隨着它告訴投資組合的DifferencePercent
值是否已經從值改變爲同列顯示投資組合在前一個工作日。
我想使用擴展方法語法將相同的SQL查詢翻譯成LINQ。然而,現在我只是嘗試使用投資組合屬性和當前投資組合的ValueDate和前一個業務日期相同投資組合的ValueDate進行自我加入。
var result = NavList.Join(NavList,
outer => new { outer.Portfolio, outer.ValueDate },
inner => new { inner.Portfolio, PD = inner.ValueDate.PreviousBusinessDate() },
(outer, inner) => new { outer, inner });
[PreviousBusinessDate()是返回datetime擴展方法]
在這裏,我得到一個錯誤:
The type arguments for method 'System.Linq.Enumerable.Join(System.Collections.Generic.IEnumerable, System.Collections.Generic.IEnumerable, System.Func, System.Func, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
有人可以幫助我瞭解的問題和解決方案。
*「方法的類型參數....」* - 您沒有包含**最重要的**信息 - 方法**的名稱**。另外,我不知道它是否相關,但是您不能在投影**表達式**中使用擴展方法。 –
該方法的名稱究竟意味着什麼? Join方法拋出錯誤。 – Lucifer
再一次,錯誤消息是*「**方法的類型參數** ...」*。哪種方法?在代碼片段中有2個方法 - 「加入」和您的自定義擴展方法。我的意思是,當你遇到問題時,包括整個異常信息,大部分時候答案都在那裏。 –