Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# 寻找一种更好的方法来获得每个城市的计数_C#_Linq_Entity Framework - Fatal编程技术网

C# 寻找一种更好的方法来获得每个城市的计数

C# 寻找一种更好的方法来获得每个城市的计数,c#,linq,entity-framework,C#,Linq,Entity Framework,我想计算一下某个城市有多少人居住。我有一个数据库,里面有人,这个表有一个外键,将某个人链接到一个城市,这是另一个表 例如: 城市z:5人 y市:10人 城市x:4人 我可以得到这些结果,但我只是不喜欢我这样做,因为我调用数据库x的次数 public List<int> getStuff(List<int> listOfCityIDs ) { var returnList = new List<int>(); foreach

我想计算一下某个城市有多少人居住。我有一个数据库,里面有人,这个表有一个外键,将某个人链接到一个城市,这是另一个表

例如:

城市z:5人 y市:10人 城市x:4人 我可以得到这些结果,但我只是不喜欢我这样做,因为我调用数据库x的次数

 public List<int> getStuff(List<int> listOfCityIDs )
    {
       var returnList = new List<int>();
       foreach (int z in listOfCityIDs)
        {
             returnList.Add((from x in conn.people
                             where x.city == z
                             select x).Count());
        }
        return returnList;
    }
public List getStuff(List listOfCityIDs)
{
var returnList=新列表();
foreach(ListofCityId中的int z)
{
returnList.Add((从康涅狄格州的x开始)
其中x.city==z
选择x.Count());
}
退货清单;
}
我很确定有更好/更有效的方法来使用LINQ,但我似乎找不到方法

有什么想法吗

亲切问候,,
Jane

当您调用时,Linq将为您优化此设置。Count()它意识到您不需要整个结果集


还请记住,如果您正在访问一个数据库(我假设您是),则结果集是一个IQueryable,在您尝试从中获取一个值之前不会执行。

Linq将在您调用.Count()时对此进行优化。它意识到您不需要整个结果集


还要记住,如果您正在访问一个数据库(我假设您是),那么结果集是一个IQueryable,在您尝试从中获取一个值之前,它不会被执行。

这将很好地转换为SQL语句

conn.people.GroupBy(p => p.city).Select(p => new { City = p.Key, Count = p.Count()});
这会把他们都弄到手的。如果你想在某些城市建立基地,试试看

conn.people.Where(p => listOfCityIDs.Any(c => c == p.city))
  .GroupBy(p => p.city).Select(p => new { City = p.Key, Count = p.Count()});

这将很好地转换为SQL语句

conn.people.GroupBy(p => p.city).Select(p => new { City = p.Key, Count = p.Count()});
这会把他们都弄到手的。如果你想在某些城市建立基地,试试看

conn.people.Where(p => listOfCityIDs.Any(c => c == p.city))
  .GroupBy(p => p.city).Select(p => new { City = p.Key, Count = p.Count()});

按城市id对人员进行分组如何?

按城市id对人员进行分组如何?

如果您需要更清晰的语法,它可以作为延迟查询使用

var g = from c in cities
    join p in people
    on c equals p.CityId
    group p.CityId by p.CityId into grouped
    select new { CityId = grouped.Key, Count = grouped.Count() };

如果您想要一个更干净的语法,它可以作为延迟查询使用

var g = from c in cities
    join p in people
    on c equals p.CityId
    group p.CityId by p.CityId into grouped
    select new { CityId = grouped.Key, Count = grouped.Count() };

这是不一样的,有一组ID表示要计数的城市,需要WHERE子句:)实体框架linq提供者知道如何获取INT列表并将其转换为sql吗?是的,在这种情况下,可以在查询数据库后执行。但不确定EF是否能够将其转换为SQLThank,这确实是我想要的。但是这种方法在数据库负载方面更有效吗?这不一样,有一组ID表示要计数的城市,需要WHERE子句:)实体框架linq提供者知道如何将INT列表转换为sql吗?是的,在这种情况下,可以在查询数据库后执行。但不确定EF是否能够将其转换为SQLThank,这确实是我想要的。但是,这种方法在数据库负载方面更有效吗?当您将每个项目放入一个列表时,结果集就是一个列表。当您将每个项目放入一个列表时,结果集就是一个列表。