是否存在从 Kentico 的 cms.state class 中提取状态列表的现有方法?

Is there an existing method to pull the list of states from cms.state class in Kentico?

我需要从 cms_state table 中提取州(美国)列表,但想知道 Kentico 中是否存在 api 可以在我使用 [=18 之前执行此操作=].

谢谢!

不幸的是,没有直接获取美国各州的直接方法。但是,使用 Kentico 8 中引入的 DataQuery API,可以轻松构造一个强类型查询(或一组查询)来获取美国各州的列表。

我们有两种方法可以做到这一点。一个假设您已经拥有国家/地区信息对象,另一个假设您不 and/or 您想要在一个数据库查询中执行所有州的提取。需要注意的是,这些已经在 Kentico 11 上进行了测试,但应该可以追溯到 Kentico 8,因为两家提供商都在 CountryInfoProvider and 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 查询,它有一个子 select,它获取第一个与三字母国家代码美国匹配的 CountryID,然后获取与该 CountryID 匹配的所有州.

我们在这里不使用 .Source() 方法,因为 CMS_State 和 CMS_Country 共享 CountryID 列,这使得访问 where 中的相应列稍微复杂一些条款。