我有一个SQL查询,其工作原理如下:
SELECT TOP 100
Max(Table_ID) as Max_ID,
Col1,
Col2,
Col3,
COUNT(*) AS Occurences
FROM myTable
GROUP BY Col1, Col2, Col3
ORDER BY Occurences DESC
如何编写相同的Linq查询?
问题是,只要我应用分组,就我的情况而言,我无法访问未分组的列 Table_ID 。
var errors = from r in MyTable
group e by new {e.Col1, e.Col2} into g
orderby g.Count() descending
select new {MaxId = ???, Count = g.Count(), g.Key.Col1, g.Key.Col2};
答案 0 :(得分:4)
使用g.Max(x => x.TableID)
:
var errors = from r in MyTable
group e by new {e.Col1, e.Col2} into g
orderby g.Count() descending
select new {MaxId = g.Max(x => x.TableID),
Count = g.Count(), g.Key.Col1, g.Key.Col2};
(假设你想要每组中的最大值。)
答案 1 :(得分:1)
Jon的回答很好,我只想详细说明原因:
问题是,一旦我应用我的分组,我就无法访问未分组的列
r超出了范围......为什么会这样?
结束查询的两种方法是select
或group by
子句。当你将查询延续条款into g
添加到group by
时,你会说 - 查询的顶级元素是g
,并且在此之前查询中引入的所有变量都将被删除来自范围。
如果您在this msdn article搜索单词拼接,则可以看到示例。
请勿将此into
的使用与join on equals into
混淆,{{1}}是群组加入,而不是查询延续。组连接不会从范围中删除先前的变量。