Linq TO SQL group by max 问题

kk5595 2012-07-06 11:26:33
已经获取到了如下格式的结果集

country productname sum

USA ipad 100,000
USA mac air 200,000
CHINA dell 100,000


我想显示每个国家,销售金额最多的那个产品信息。如上表就显示

US mac air 200,000
CHINA DELL 100,000



-------------------------------------------------------------
下面是我的Linq 语句,productname 那列显示不对。。。


groupResultQuery 就是 上表结果集。



var finResult=from a in groupResultQuery
group a by new { country = a.country } into cqqq



select new
{
country = cqqq.Key.country,
pname=cqqq.Select(n=>n.productname),

total=cqqq.Max(n=>n.sum)

};


foreach (var f in finResult)
{
Write(f.country + "," + f.pname + "," + f.total);
}


...全文
245 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlf535944903 2012-07-09
  • 打赏
  • 举报
回复
再说下SQL

我希望的是


select * from
(

select row_number() over(partition by country order by [sum] desc) as rowid,* from list

) as tmp

where rowid<2




但生成的是



SELECT [t1].[country], [t3].[productname] AS [pname], [t3].[sum] AS [total]
FROM (
SELECT [t0].[country]
FROM [List] AS [t0]
GROUP BY [t0].[country]
) AS [t1]
CROSS APPLY (
SELECT TOP (1) [t2].[productname], [t2].[sum]
FROM [List] AS [t2]
WHERE (([t1].[country] IS NULL) AND ([t2].[country] IS NULL)) OR (([t1].[country] IS NOT NULL) AND ([t2].[country] IS NOT NULL) AND ([t1].[country] = [t2].[country]))
ORDER BY [t2].[sum] DESC
) AS [t3]
ORDER BY [t3].[sum] DESC





如何生成上面的SQL
wlf535944903 2012-07-09
  • 打赏
  • 举报
回复
这个只是取一个的

如果取前几个 稍微改动下大神Tim的即可



from a in Lists
group a by a.Country into cqqq
from max in cqqq.OrderByDescending(x => x.Sum).Take(1)
select new
{
country = cqqq.Key,
pname = max.Productname,
total = max.Sum
}





q107770540 2012-07-06
  • 打赏
  • 举报
回复

var finResult=from a in groupResultQuery
group a by a.country into cqqq
let max=cqqq.OrderByDescending(x=>x.sum).First()
select new
{
country = cqqq.Key,
pname=max.productname,
total=max.sum
};


foreach (var f in finResult)
{
Write(f.country + "," + f.pname + "," + f.total);
}
huangwenquan123 2012-07-06
  • 打赏
  • 举报
回复
            List<Country> list = new List<Country>();
list.Add(new Country() { country = "USA", productname = "ipad", sum = 100000 });
list.Add(new Country() { country = "USA", productname = "mac air", sum = 200000 });
list.Add(new Country() { country = "CHINA", productname = "dell", sum = 100000 });
(from l in list group l by l.country into g select new { country = g.Key, productname = g.Max(x => x.productname), sum = g.Max(x => x.sum) }).ToList().ForEach(x => Console.WriteLine(x.country + "==" + x.productname + "==" + x.sum));
kk5595 2012-07-06
  • 打赏
  • 举报
回复
pname列全为 ,System.Data.Linq.SqlClient.Implementation.ObjectMaterializer`1+<Conver
kk5595 2012-07-06
  • 打赏
  • 举报
回复
有了。。。刚才打错。
kk5595 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

C# code

var finResult=from a in groupResultQuery
group a by a.country into cqqq
let max=cqqq.OrderByDescending(x=>x.sum).First()
select new
{
country = cqqq.Key,
pname=max.productnam……
[/Quote]



我的是net 3.5
let max=cqqq.OrderByDescending(x=>x.sum).First() 后面.First()方法没有。。

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧