コード例 #1
0
        /// <summary>
        /// 构造主键的过滤条件。
        /// </summary>
        /// <param name="context">SQL构造上下文信息。</param>
        /// <param name="sqlInfo">SQL拼装的中间变量。</param>
        /// <param name="currentObject">主键过滤条件对应的领域对象</param>
        /// <param name="pkColumnData">主键值Dictionary,Key是ElemetID,Value是列的值。</param>
        /// <param name="IsUseFieldPrefix">是否使用列全名。</param>
        /// <returns>主键过滤条件</returns>
        protected FilterConditionStatement GetPrimaryKeyConditionsEx(SqlBuildingContext context, SqlBuildingInfo sqlInfo,
                                                                     DomainObject currentObject, IDictionary <string, object> pkColumnData, bool IsUseFieldPrefix = false)
        {
            var conditionItem = new FilterConditionStatement();

            foreach (KeyValuePair <string, object> pkdata in pkColumnData)
            {
                var pkElement = currentObject.Elements.FirstOrDefault(i => i.ID == pkdata.Key);
                var pkColumn  = currentObject.DataObject.PKColumns.FirstOrDefault(c => c.ID == pkElement.DataColumnID);

                var  tableName  = context.GetTableName(currentObject.DataObject.ID);
                bool isTextType = DataTypeUtils.IsTextType(pkColumn.DataObjectID);
                if (isTextType)
                {
                    var keyCondition = new KeyValueConditionStatement <string>();
                    keyCondition.Field.FieldName = pkColumn.ColumnName;
                    if (IsUseFieldPrefix)
                    {
                        var sqlTable = this.TryFindAndRegistSqlTable(tableName, tableName, tableName, tableName, sqlInfo);
                        keyCondition.Field.IsUseFieldPrefix = IsUseFieldPrefix;
                        keyCondition.Field.Table            = sqlTable;
                    }
                    keyCondition.Value           = Convert.ToString(pkdata.Value);
                    keyCondition.LogicalOperator = OperatorType.And;
                    conditionItem.ChildCollection.Add(keyCondition);
                }
                else
                {
                    var keyCondition = new KeyValueConditionStatement <long>();
                    keyCondition.Field.FieldName = pkColumn.ColumnName;
                    if (IsUseFieldPrefix)
                    {
                        var sqlTable = this.TryFindAndRegistSqlTable(tableName, tableName, tableName, tableName, sqlInfo);
                        keyCondition.Field.IsUseFieldPrefix = IsUseFieldPrefix;
                        keyCondition.Field.Table            = sqlTable;
                    }
                    keyCondition.Value           = Convert.ToInt64(pkdata.Value);
                    keyCondition.LogicalOperator = OperatorType.And;
                    conditionItem.ChildCollection.Add(keyCondition);
                }
            }

            return(conditionItem);
        }