我是LINQ的新手,並試圖將下面的TSQL轉換爲LINQ,有沒有什麼辦法可以做到這一點?感謝所有的幫助。如何將以下sql組通過語句轉換爲Linq
這是SQL語句,我想轉換
SELECT [t5].[StatusID], [t5].[FriendlyName], sum(1) AS [Count]
FROM (
SELECT distinct [t0].DealID, [t0].[StatusID], [t1].[FriendlyName]
FROM [DR_Deal] AS [t0]
INNER JOIN [DR_DealStage] AS [t1] ON [t0].[StatusID] = [t1].[DealStageID]
INNER JOIN [DR_Deal_ApproverInfo] AS [t2] ON [t0].[DealID] = [t2].[DealID]
INNER JOIN [DR_Approver] AS [t3] ON [t2].[ApproverID] = ([t3].[ApproverID])
INNER JOIN [DR_Profile] AS [t4] ON [t3].[ProfileID] = ([t4].[ProfileID])
WHERE (LOWER([t4].[Email]) = @p0) OR (LOWER([t0].[CreatedBy]) = @p1)
) AS [t5]
GROUP BY [StatusID], [FriendlyName]
ORDER BY [t5].[StatusID]
EDITS
是使用linqpad產生上面的SQL,這是我真正想要轉換到LINQ SELECT COUNT(DISTINCT [t0].DealID) AS count, [t0].[StatusID], [t1].[FriendlyName]
FROM [DR_Deal] AS [t0]
INNER JOIN [DR_DealStage] AS [t1] ON [t0].[StatusID] = [t1].[DealStageID]
INNER JOIN [DR_Deal_ApproverInfo] AS [t2] ON [t0].[DealID] = [t2].[DealID]
INNER JOIN [DR_Approver] AS [t3] ON [t2].[ApproverID] = ([t3].[ApproverID])
INNER JOIN [DR_Profile] AS [t4] ON [t3].[ProfileID] = ([t4].[ProfileID])
WHERE (LOWER([t4].[Email]) = LOWER(@Email)) OR (LOWER([t0].[CreatedBy]) = LOWER(@UserName))
GROUP BY [t0].[StatusID], [t1].[FriendlyName]
ORDER BY [t0].[StatusID]
我想我找到了解決方案來做count(distinct)
使用linq,我最初偶然發現,但仍然轉換的解決方案沒有工作,我想下面的LINQ代碼不工作,因爲我使用SQL 2000和生成的SQL有嵌套的選擇,似乎有一些限制sql 2000.我仍然不確定我的結論,可能是linq blelow是錯誤的altogther,或者可能有更好的方法來編寫上述sql。
var query = (from d in DR_Deal
join s in DR_DealStage
on d.StatusID equals s.DealStageID
join da in DR_Deal_ApproverInfo
on d.DealID equals da.DealID
join a in DR_Approver
on da.ApproverID equals a.ApproverID
join p in DR_Profile
on a.ProfileID equals p.ProfileID
where p.Email.ToLower().Equals("[email protected]")
|| d.CreatedBy.ToLower().Equals("test")
group d.DealID by new { d.StatusID, s.FriendlyName}
into grp
select new
{
StatusID = grp.Key.StatusID,
FriendlyName = grp.Key.FriendlyName,
Count = grp.Distinct().Count()
}).OrderBy(x=> x.StatusID);
對我來說,你提交的t-sql似乎是linq-to-sql提供程序生成的sql。你遇到的確切問題是什麼? – 2011-04-06 13:41:09
我發現學習LINQ的一個有用的工具是** LinqPAD **你可以在這裏找到它[www.linqpad.net/) – tobias86 2011-04-06 13:42:38
@nasmifive:我同意,這看起來非常就像Linq-to-Sql生成的T-Sql一樣 – tobias86 2011-04-06 13:43:37