我需要从cms_state表中提取状态列表(US),但想知道Kentico中是否存在可以在使用SQL之前执行此操作的api。
谢谢!
答案 0 :(得分:1)
不幸的是,没有直接获取美国各州的方法。但是,使用Kentico 8中引入的DataQuery API,可以很容易地构建一个强类型查询(或一组查询)来获取美国州的列表。
我们可以通过两种方式来做这件事。一个假定您已经拥有国家/地区信息对象,另一个假定您没有和/或您想要在一个数据库查询中执行所有状态的提取。需要注意的是,这些已经在Kentico 11上进行了测试,但是应该可以像Kentico 8一样工作,因为两个提供商都拥有以下CountryInfoProvider和StateInfoProvider的API文档中引用的所有方法。
var country = CountryInfoProvider.GetCountryInfoByCode("USA");
var states = StateInfoProvider.GetStates()
.WhereEquals(nameof(StateInfo.CountryID), country.CountryID);
这将使用代码USA获取国家/地区,然后您将获取与CountryID匹配的所有状态。这最多使用两个SQL查询来获取所有状态。
还提供了StateInfoProvider.GetCountryStates()
方法,但是从Kentico 11开始,它已被标记为已过时,建议使用StateInfoProvider.GetStates()
方法。
var states = StateInfoProvider.GetStates()
.WhereEquals(nameof(StateInfo.CountryID),
CountryInfoProvider.GetCountries()
.WhereEquals(nameof(CountryInfo.CountryThreeLetterCode), "USA")
.TopN(1)
.Column(nameof(CountryInfo.CountryID)));
这将创建一个SQL查询,该查询具有一个子选择,用于获取与三字母国家代码USA匹配的第一个CountryID,然后获取与该CountryID匹配的所有状态。
我们这里不使用.Source()
方法,因为CMS_State和CMS_Country共享CountryID列,这使得访问where子句中的相应列稍微复杂一些。