Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 利用Linq从地理数据中过滤国家信息_C#_Entity Framework_Linq - Fatal编程技术网

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};
                    });