protected DBBuilder GetWhereCondition(IDataEntity dataEntity) { DBBuilder builder = DBBuilder.Define("1=1 "); if (dataEntity == null) { return(builder); } string tableName = dataEntity.Property.TableAttribute.TableName; foreach (PropertyInfo p in dataEntity.Property.PropertyInfos) { if (dataEntity.Property.ColumnAttributes[p.Name].IsExtend) { continue; } if (!string.IsNullOrEmpty(dataEntity.Property.ColumnAttributes[p.Name].WhereCondition)) { //如果设置了查询表达式则用这个查询表达式并且忽略其本身的值 builder.Append(string.Format("and ({0}) ", dataEntity.Property.ColumnAttributes[p.Name].WhereCondition)); continue; } object value = p.GetValue(dataEntity, null); if (value != null) //只查询付值的字段 { if (Type.GetTypeCode(p.PropertyType) == TypeCode.String || p.PropertyType.FullName.Contains("Guid")) //是字符串时使用参数方式查询 { if (dataEntity.Property.ColumnAttributes[p.Name].IsExact) //精确查询 { builder.Append(dbAdapter => string.Format("and {0}.{1} = {2} ", dbAdapter.FormatTable(tableName), dbAdapter.FormatField(p.Name), dbAdapter.FormatParameter(p.Name))); builder.Parameters.Add(p.Name, value); } else //模糊查询 { builder.Append(dbAdapter => string.Format("and {0}.{1} like {2} ", dbAdapter.FormatTable(tableName), dbAdapter.FormatField(p.Name), dbAdapter.FormatParameter(p.Name))); builder.Parameters.Add(p.Name, string.Format("%{0}%", value)); } } else if (p.PropertyType.FullName.Contains("DateTime")) { builder.Append(dbAdapter => string.Format("and " + dbAdapter.FormatFunction("datediff", "{0}", "{1}.{2}", "{3}") + "=0 ", dataEntity.Property.ColumnAttributes[p.Name].DateTimePart, dbAdapter.FormatTable(tableName), dbAdapter.FormatField(p.Name), dbAdapter.FormatParameter(p.Name))); builder.Parameters.Add(p.Name, value, DbType.DateTime); } else if (p.PropertyType.FullName.Contains("Boolean")) { builder.Append(dbAdapter => string.Format("and {0}.{1} = {2} ", dbAdapter.FormatTable(tableName), dbAdapter.FormatField(p.Name), Convert.ToBoolean(value) ? 1 : 0)); } else { builder.Append(dbAdapter => string.Format("and {0}.{1} = {2} ", dbAdapter.FormatTable(tableName), dbAdapter.FormatField(p.Name), value)); } } } if (dataEntity.Property.DbParameters != null && dataEntity.Property.DbParameters.ParameterNames.Count() > 0) { builder.Parameters.AddExpandoParams(dataEntity.Property.DbParameters); } return(builder); }