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);
        }
示例#2
0
        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);
        }