选择符合某些标准的孩子的父母



所以,我从我的数据库中检索了一堆国家:

var countries = dbContext.Countries.toList();

然后,根据程序流程,我进一步过滤这些贡献:

var asianContries = result.where(c=>c.continent == "asia").toList();
"我的国家/地区"表是"城市

"表的"父"表,每个城市与一个国家/地区相关。城市表包含人口信息,我想进一步过滤这些信息。

我想要从已经过滤的"亚洲国家"列表对象中,列出人口超过 500,000 的城市的国家/地区列表。我只是冷酷地试图弄清楚该怎么做。另外,我是这些东西的新手。

为什么使用这种多步骤过滤而不是一次性选择所有条件?程序流的复杂性。说来话长。:-)

如果我

理解正确,您已经过滤到亚洲国家/地区,现在您想进一步过滤这些结果。如果您将人口作为 int,我会采取两种方式之一

var cities = asianCountries.Select(x => x.cities.Where( y => y.population > 500000)).ToList();

如果它是一个字符串,那么

var cities = asianCountries.Select(x => x.cities.Where(y => Convert.ToInt32(y.population) > 500000)).ToList();

我认为这应该有效。

连接多个表的示例,

from ct in dbContext.Countries
          join ci in dbContext.Cities on ct.CityID equals ci.ID
          where (ct.continent == "asia") && (ci.Population == // yourCondition) 
          select new { country = ct.Name, city = ci.Name , // other fields you want to select
                     };

您可以在此处参考如何连接多个表

>如果对象实现IQueryable<T>则仅在枚举对象时执行查询。 这意味着您可以将查询链接在一起,并且执行将延迟到您调用(例如 ToList() )。

在您的示例中,您可以执行以下操作:

// to select the cities
var largeCities = dbContext.Countries
                           .Include(t => t.Cities)
                           .Where(c=> c.continent == "asia" 
                                  && c.Cities.Population > 500000)
                           .Select(c => c.Cities).ToList();
// EDIT
// to select the countries that have these cities
var countries = dbContext.Countries
                           .Include(t => t.Cities)
                           .Where(c=> c.continent == "asia" 
                                  && c.Cities.Population > 500000)
                           .ToList();  // remove .Select(c => C.Cities) if you want the countries

var largeCities = asianCountries
                       .Where(c => c.Cities.Population > 500000)
                       .Select(c => c.Cities)
                       .ToList();

最新更新