C# C Linq multiple GroupBy并选择

C# C Linq multiple GroupBy并选择,c#,linq,group-by,C#,Linq,Group By,我有两个链接的对象,州和城市,所以每个州都有他的城市,每个城市都链接到一个州。我也有一些单元有stateID和citieID,但它们没有链接,因为我只有Json格式 我需要的是只得到有单位的州和城市。我设法得到了前两个,但我想知道是否有更快的方法,因为我每天都要更新这些数据: //unitsData have a List of Units objects, this only have stateID, citieID and the unit data var unitsData = obj

我有两个链接的对象,州和城市,所以每个州都有他的城市,每个城市都链接到一个州。我也有一些单元有stateID和citieID,但它们没有链接,因为我只有Json格式

我需要的是只得到有单位的州和城市。我设法得到了前两个,但我想知道是否有更快的方法,因为我每天都要更新这些数据:

//unitsData have a List of Units objects, this only have stateID, citieID and the unit data
var unitsData = objUnidade.BuscaUnidades();

//unitsState have all units grouped by State, here i also only have stateID and citieID, same data as above
var unitsState = unitsData.GroupBy(x => x.codigoEstado);

//Here is where i make my search inside the unidadesEstados and select only the Estados that i need
var activeStates = unitsState.Select(est => db.States.FirstOrDefault(x => x.ID == est.Key)).Where(state => state != null).ToList();
要进行城市搜索,我也在做同样的事情,但是使用了一个额外的foreach,有没有更好的方法?

如果db.States查询数据库,那么对于美国的每个组,都会执行state查询。如果状态数不是非常大,可以将它们存储在列表中

var dbStates = db.States.ToList();
var activeStates = unitsState.Select(est => dbStates.FirstOrDefault(x => x.ID == est.Key)).Where(state => state != null).ToList();

您正在多次查询数据库。最好使用选择的。。。在查询中,它在LINQ中看起来像:

var units = objUnidad.BuscaUnidades();
var stateIds = units.Select(u => u.codigoEstado).ToList();
var activeStates = db.States.Where(s => stateIds.Contains(s.Id)).ToList();
编辑:你也问过城市。更多的是相同的:

var cityIds = units.Select(u => u.codigoCuidad).ToList()
var activeCities = db.Cities.Where(c => cityIds.Contains(c.Id)).ToList();

此解决方案将为您提供每个单位引用其ID的城市@StriplingWarrior的解决方案将为您提供美国每一个拥有单位的城市。

请注意:如果您用英语命名变量,对其他城市来说会更容易。完成,谢谢提示!太好了,我如何才能同时获取每个选定州的城市?@Terkhos:var cities=db.cities.Wherec=>StateId.Containsc.StateId.ToListed以添加城市解决方案。现在我不确定你是在寻找被选中州的每一个城市,还是只寻找ID由单位指定的城市;如果是前者,则使用@StriplingWarrior的查询;如果是后者,请使用我的。@JerryFederspiel:您需要Containss.Id或类似的东西,而不是Containss。谢谢Jerry和Stripling,它按照我的要求工作了,关于您的问题Jerry我想要选定州的所有城市。是的,db.States查询数据库,不是,我只有27个州。我怎样才能得到每个选定州的城市呢?我想你可以从数据库中选择所有城市,也将它们存储在列表中,然后按州对它们进行分组。