C# 利用Linq从地理数据中过滤国家信息
我的数据库中有这样一个表:C# 利用Linq从地理数据中过滤国家信息,c#,entity-framework,linq,C#,Entity Framework,Linq,我的数据库中有这样一个表: Id City Country ============================== 1 A X 2 B X 3 C X 4 D X 5 M Y 6 N Y 7 O Y 8
Id City Country
==============================
1 A X
2 B X
3 C X
4 D X
5 M Y
6 N Y
7 O Y
8 P Y
9 U Z
10 V Z
我想从表中获取具有第一个(最小)Id的国家。结果集应如下所示:
Id Country
=================
1 X
5 Y
9 Z
我可以通过SQL获得以下结果:
SELECT
MIN(Id) AS Id,
Country
FROM
AllCityList
GROUP BY
Country
ORDER BY
Country ASC
但当我将此视图添加到EntityFramework时,因为
MIN()
隐藏了PrimaryKey列(Id),我得到了一个错误。因此,我想将此查询转换为Linq。如何在Linq中编写此查询?您可以将GroupBy
与Min
一起使用。下面的查询根据国家/地区对数据进行分组,并选择Min
Id
检查演示场景的dotnetfiddle
另外,使用
Min
可以确保在列不是聚集索引的情况下获取最小的Id。看到这个问题了吗…到目前为止您尝试了什么?Linq语法应该类似于records.GroupBy(x=>x.Country)。选择(g=>g.OrderBy(x=>x.Id)。First()
@Innat3我认为在这种情况下,Order by不需要records.GroupBy(x=>x.Country)。Select(g=>g.First())
也会起作用。@sushantyelpall在这种情况下确实不起作用,但最好确保不要给出错误的结果。结果是第一个城市。@SushantYelpale-您可以检查dotnet fiddle输出以验证结果吗?因为您的fiddle结果应该是3 C X,就像用户希望的那样--我想从表中获取具有第一个(最小)Id的国家。您刚刚修改了fiddle
return AllCityList.GroupBy(d => d.Country).Select(d =>
{
var first = d.First();
return new { Id = d.Min(x => x.Id), Country = first.Country};
});