创建LINQ to SQL以计算参数

时间:2010-04-30 15:49:51

标签: linq-to-sql

我正在尝试将SQL查询转换为LINQ to SQL。我不断收到错误“类型'system.string'不支持序列运算符”如果我取出了不同的计数部分,它就可以了。是不是因为我正在使用GROUP BY?

SELECT    COUNT(EpaValue) AS [Leak Count], Location, EpaValue AS [Leak Desc.]
FROM         ChartMes.dbo.RecourceActualEPA_Report
WHERE     (EpaName = N'LEAK1') AND (Timestamp) > '20100429030000'
GROUP BY EpaValue, Location
ORDER BY Location, [Leak Count] DESC


Dim temp = (From p In db2.RecourceActualEPA_Reports _
                     Where (p.Timestamp >= str1stShiftStart) And (p.Timestamp < str2ndShiftCutoff) _
                     And (p.EpaName = "Leak1") _
                     Select p.EpaName.Distinct.Count(), p.Location, p.EpaValue)

2 个答案:

答案 0 :(得分:1)

p.EpaName似乎是一个字符串,而不是一个集合,因此您无法在那里应用Count()

以下是您尝试使用LINQ构建的查询(根据您的SQL查询)(我不熟悉VB,因此查询是用C#编写的):

var temp =  
    db2.RecourceActualEPA_Reports
        .Where(p =>
                p.Timestamp >= str1stShiftStart &&
                p.Timestamp < str2ndShiftCutoff &&
                p.EpaName == "Leak1"
        ).GroupBy(p => new { Key1 = p.EpaValue, Key2 = p.Location })
        .Select(g => new
        {
            Count = g.Count(),
            Value = g.Key.Key1,
            Location = g.Key.Key2
        }).OrderBy(i => new { i.Location, i.Count });

请在未来的格式中使用this突出显示您的代码,而不是(或不仅仅)使用VS / Management Studio。

答案 1 :(得分:0)

以下是在SQL和Visual Studio中对其进行格式化的方式 SQL


SELECT COUNT(EpaValue)AS [泄漏计数],位置,EpaValue AS [泄漏描述] 来自ChartMes.dbo.RecourceActualEPA_Report WHERE(EpaName = N'LEAK1')和(时间戳)&gt; '20100429030000' GROUP BY EpaValue,位置 按位置排序,[泄漏计数] DESC

VB


Dim temp =(来自p in db2.RecourceActualEPA_Reports _ 其中(p.Timestamp&gt; = str1stShiftStart)和(p.Timestamp&lt; str2ndShiftCutoff)_ 并且(p.EpaName =“Leak1”)_ 选择p.EpaName.Distinct.Count(),p.Location,p.EpaValue)