public bool GetDependsOnItem(string valueTableName, DependencyItemModel dependence, IndexItemModel item, out IndexItemModel dependsOnItem) { var referenceKeyParams = dependence.ReferenceKeysArr; var foreignKeyParams = dependence.ForeignKeysArr; var @params = foreignKeyParams .Select((fk, i) => new { fk, i }) .Select(fk => new KeyValuePair <string, string>(referenceKeyParams[fk.i], item[fk.fk].ToString())) .ToDictionary(fk => fk.Key, fk => fk.Value); var dynamicParams = new DynamicParameters(); foreach (var p in @params) { if (string.IsNullOrWhiteSpace(p.Value)) // An item has dependency with NULL value is not depends on anything { dependsOnItem = null; return(false); } dynamicParams.Add(p.Key, p.Value); } var sql = $@" SELECT TOP 1 * FROM {valueTableName} WHERE {string.Join(" AND ", @params.Select(p => $@"[{p.Key}] = @{p.Key}"))} "; dependsOnItem = _connection.Query <object>(sql, param: dynamicParams, transaction: _transaction) .Select(d => IndexItemModel.FromJObject(JObject.FromObject(d))).FirstOrDefault(); return(true); }
public IndexItemModel GetDependsOnItem(string valueTableName, DependencyItemModel dependence, IndexItemModel item) { var referenceKeyParams = Regex.Split(dependence.ReferenceKeys, "[,;|]", RegexOptions.Multiline | RegexOptions.IgnoreCase); var foreignKeyParams = Regex.Split(dependence.ForeignKeys, "[,;|]", RegexOptions.Multiline | RegexOptions.IgnoreCase); var @params = foreignKeyParams .Select((fk, i) => new { fk, i }) .Select(fk => new KeyValuePair <string, string>(referenceKeyParams[fk.i], item[fk.fk].ToString())) .ToDictionary(fk => fk.Key, fk => fk.Value); var dynamicParams = new DynamicParameters(); foreach (var p in @params) { dynamicParams.Add(p.Key, p.Value); } var sql = $@" SELECT TOP 1 * FROM {valueTableName} WHERE {string.Join(" AND ", @params.Select(p => $@"[{p.Key}] = @{p.Key}"))} "; var dependsOnItem = _connection.Query <object>(sql, param: dynamicParams, transaction: _transaction) .Select(d => IndexItemModel.FromJObject(JObject.FromObject(d))).FirstOrDefault(); return(dependsOnItem); }