C# 寻找一种更好的方法来获得每个城市的计数
我想计算一下某个城市有多少人居住。我有一个数据库,里面有人,这个表有一个外键,将某个人链接到一个城市,这是另一个表 例如: 城市z:5人 y市:10人 城市x:4人 我可以得到这些结果,但我只是不喜欢我这样做,因为我调用数据库x的次数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
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,这确实是我想要的。但是,这种方法在数据库负载方面更有效吗?当您将每个项目放入一个列表时,结果集就是一个列表。当您将每个项目放入一个列表时,结果集就是一个列表。