var countries= ctx.Country
.Include("cities") // I want to take only 10 cities. How to take top 10 cities and city name starts from "A"
.Include("Schools")
.Where(x => (x.CountryID == 100))
.ToList();
1 - 十大ciites
2 - CityName字段的标准
我正在使用Entity Framework 6
答案 0 :(得分:0)
使用类似的东西:
var countries = ctx.Country.Select( c => new {
Country = c,
Cities = c.Cities.Where(ci = > ci.CityName.ToLower().Startwith("A".ToLower())).Take(10),
Schools = Cities.select(ci => ci.Schools)
}).Where(x => x.CountryID == 100).ToList();
我没有测试它,也许你会得到一些编译错误,因为我不知道你如何命名你的课程。
如果您需要任何澄清或有任何疑问,请与我们联系
答案 1 :(得分:0)
设置国家/地区,学校和城市之间的导航属性关系,然后根据您要接收的数据选择一个结构为匿名类型,让EF处理查询合成。
var countryData = ctx.Countries
.Include(x => x.Schools)
.Where(x => x.CountryID == 100)
.Select(x => new { Country = x, Cities = x.Cities.OrderBy(c => c.CityName).Take(10).ToList() })
.ToList(); // This likely only returns 1 row due to the CountryId Where Clause...
这将为您提供一个结构,其中包含国家/地区参考以及与每个国家/地区关联的最多10个城市的列表。
如果您在结果中的Country对象上访问Cities集合,您仍然会延迟加载所有城市,但上述语句中返回的.Cities集合将是您关注的10。
如果一个国家/地区有很多城市,并且加载此完整集可能会非常昂贵,那么您可能需要考虑让实体断开连接而不是将城市集合与某个国家/地区相关联,将城市视为顶级城市碰巧与国家有关系的实体。 (即城市映射.HasRequired(x=> Country).WithMany()
而不是在国家/地区映射.HasMany(x=> x.Cities).WithRequired(x=>x.Country)
。)
如果您想要多个国家/地区,通过使用GroupBy表达式,这会稍微更改查询,但它只返回根据搜索条件至少拥有一个城市的国家/地区。