2010-09-25 146 views
0

我嘗試將這種sql查詢轉換爲LINQ在visual basic, ,但我被困在如何使百分比..我也不知道如何使用linqpad創建此linq 請幫助。如何基於這個SQL創建一個LINQ查詢?

SELECT CASE RIGHT(PICName, 3) 
     WHEN '(P)' THEN 'Problem' 
     WHEN '(R)' THEN 'Request' 
     ELSE 'Other' 
     END AS [Requests/Problems], 
     COUNT(RIGHT(PICName, 3)) AS Amount, 
     CONVERT(decimal(18, 2), 
       CONVERT(Decimal(18, 2), COUNT(RIGHT(PICName, 3)))/
       CONVERT(Decimal(18, 2), 
         (SELECT COUNT(RIGHT(PICName, 3)) FROM Ticket)) 
        * 100) AS [% Amount] 
FROM Ticket 
GROUP BY RIGHT(PICName, 3) 

我需要的結果導出到一個DataGrid 它就像:

Requests/Problems | Amount | % Amount 
------------------------------------------------------ 
Problem | 20 | 20.00   
Request | 45 | 45.00 
Other | 35 | 35.00 

謝謝。

+1

到目前爲止你有什麼? – 2010-09-25 16:25:05

+0

「Ticket」表的結構是什麼?什麼是PICName? – Nasir 2010-09-25 16:46:02

+0

你使用EF嗎? LINQ2SQL? – Gabe 2010-09-25 17:18:22

回答

1

讓我們通過剝離下來的重要部件開始:

SELECT RIGHT(PICName, 3), 
     COUNT(RIGHT(PICName, 3)) AS Amount, 
     COUNT(RIGHT(PICName, 3))/(SELECT COUNT(RIGHT(PICName, 3)) FROM Ticket)) 
        * 100) AS [% Amount] 
FROM Ticket 
GROUP BY RIGHT(PICName, 3) 

從那裏,它看起來很容易:

int count = db.Tickets.Count(); 
var query = from t in db.Tickets 
      group by t.PicName.Substring(0,3) in g 
      select new 
      { 
       Requests_Problems = g.Key == "(P)" ? "Problem" : 
            g.Key == "(R)" ? "Request" : "Other", 
       Amount = g.Count, 
       PercAmount = (g.Count * 100.0)/count 
      } 
0

其實我不知道什麼開始。我是使用LINQ的新手。 票據表由ID,分配,開始日期,截止日期,PICname(PIC中的'負責人',包含負責票證的人員的姓名)組成。在PICname字段中,還有'(P)'(問題)或'(R)'(請求)將票證分類爲問題和請求。這些是Ticket表中的一些字段。門票就像隊長一樣處理用戶報告的問題。

對不起,我沒有得到你所謂的EF ..但我認爲,你是這是LINQ到SQL。

在我問這個問題之前,我試過LINQer(從http://www.sqltolinq.com/),但它不能將「COUNT」轉換成LINQ。它不是免費的

感謝詹姆斯,但我不認爲我可以將它轉換成一個可視化的基本代碼。也許,你可以解釋什麼是Key?並在group by t.PicName.Substring(0,3) in g,那真的是in而不是into?對不起,因爲我真的是LINQ的初學者,但我必須在這個應用程序中使用LINQ ..

嘿,你們有誰知道從哪裏開始瞭解像我這樣的初學者對LINQ to SQL的理解?

+0

嗨@liana哥斯達黎加。試試這個鏈接[這裏](http://msdn.microsoft.com/en-us/data/ff728653)。希望對你有幫助! – 2011-08-29 14:28:25