因此,我从数据库中检索了一些国家:
var countries = dbContext.Countries.toList();
然后,根据程序流程,我将进一步过滤以下Contries:
var asianContries = result.where(c=>c.continent == "asia").toList();
“我的国家”表是“城市”表的“父”表,每个城市都与一个国家相关。 “城市”表包含人口信息,我希望进一步对其进行过滤。
我想从已经过滤的“ asianCountries”列表对象中,选择一个国家列表,其中有人口超过500,000的城市。我只是想知道如何去做而已。另外,我是新手。
为什么这种多步骤过滤而不是一口气选择所有标准?程序流程的复杂性。很长的故事。 :-)
答案 0 :(得分:2)
如果我正确理解您的信息,现在您已过滤到亚洲国家/地区,则希望进一步过滤这些结果。 如果您的人口为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();
我认为这应该有效。
答案 1 :(得分:1)
连接多个表的示例,
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
};
您可以参考如何连接多个表here
答案 2 :(得分:1)
如果对象实现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();