public SetSiteSettingsOutput SetSiteSettings(SetSiteSettingsInput input)
        {
            var groups = input.SiteSettings.GroupBy(e => new { e.Group, e.Key });

            if (groups.Any(e => e.Count() > 1))
            {
                throw new UserFriendlyException("设置未保存,不允许添加两个相同(组,键)的设置");
            }

            var keys = groups.Select(e => e.Key);

            var siteSettings = from siteSetting in _repository.GetAll()
                               from key in keys
                               where siteSetting.Group == key.Group && siteSetting.Key == key.Key
                               select siteSetting;

            foreach (var dto in input.SiteSettings)
            {
                var siteSetting = siteSettings.FirstOrDefault(e => e.Group == dto.Group && e.Key == dto.Key);
                if (siteSetting == null)
                {
                    _repository.Insert(new SiteSetting()
                    {
                        Key         = dto.Key,
                        Value       = dto.Value,
                        DisplayName = dto.DisplayName,
                        Group       = dto.Group
                    });
                }
                else
                {
                    siteSetting.DisplayName = dto.DisplayName;
                    siteSetting.Value       = dto.Value;
                }
            }

            return(new SetSiteSettingsOutput());
        }
        public SetSiteSettingsOutput SetSiteSettings(SetSiteSettingsInput input)
        {
            var groupBys = input.SiteSettings.GroupBy(e => new { e.Group, e.Key });

            if (groupBys.Any(e => e.Count() > 1))
            {
                throw new UserFriendlyException("设置未保存,不允许添加两个相同(组,键)的设置");
            }

            var groups = input.SiteSettings.Select(e => e.Group);
            var keys   = input.SiteSettings.Select(e => e.Key);

            // 输出 Sql 没问题
            var siteSettings = _repository.GetAll().Where(e => groups.Contains(e.Group) && keys.Contains(e.Key)).ToList();

            foreach (var dto in input.SiteSettings)
            {
                var siteSetting = siteSettings.FirstOrDefault(e => e.Group == dto.Group && e.Key == dto.Key);
                if (siteSetting == null)
                {
                    _repository.Insert(new SiteSetting()
                    {
                        Key         = dto.Key,
                        Value       = dto.Value,
                        DisplayName = dto.DisplayName,
                        Group       = dto.Group
                    });
                }
                else
                {
                    siteSetting.DisplayName = dto.DisplayName;
                    siteSetting.Value       = dto.Value;
                }
            }

            return(new SetSiteSettingsOutput());
        }