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

时间:2018-01-17 01:18:55

标签: kentico

我需要从cms_state表中提取状态列表(US),但想知道Kentico中是否存在可以在使用SQL之前执行此操作的api。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

我们可以通过两种方式来做这件事。一个假定您已经拥有国家/地区信息对象,另一个假定您没有和/或您想要在一个数据库查询中执行所有状态的提取。需要注意的是,这些已经在Kentico 11上进行了测试,但是应该可以像Kentico 8一样工作,因为两个提供商都拥有以下CountryInfoProviderStateInfoProvider的API文档中引用的所有方法。

CountryInfo已经提取

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子句中的相应列稍微复杂一些。