2010-09-25 148 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