public string Execute(string key, string userId) { IQueryable <KeyKeyValue> kkvs = _dbContext .AsQueryable <KeyKeyValue>() .Where(kkv => kkv.Keys.Contains(key) && (string.IsNullOrEmpty(kkv.Scope) || kkv.Scope == userId)); if (!kkvs.Any()) { return(string.Empty); } KeyKeyValue keyKeyValue = kkvs.FirstOrDefault(kkv => kkv.Scope == userId) ?? kkvs.First(); if (keyKeyValue.AlternativeResponses.Count() > 1) { var number = Random.Next(-1, keyKeyValue.AlternativeResponses.Count()); return(number == -1 ? keyKeyValue.Response : keyKeyValue.AlternativeResponses.ElementAt(number)); } return(keyKeyValue.Response); }
public async Task ExecuteAsync(string userId, string value, ICollection <string> keys) { foreach (var key in keys) { var existingKey = _dbContext.AsQueryable <KeyKeyValue>() .FirstOrDefault(kkv => kkv.Keys.Contains(key) && kkv.Scope == userId); if (existingKey != null) { await _dbContext.DeleteAsync(existingKey); } } var kkvs = new KeyKeyValue() { Keys = keys, Response = value, AlternativeResponses = new List <string>(0), Scope = userId }; await _dbContext.SaveAsync(kkvs); }