69 lines
2.4 KiB
C#
69 lines
2.4 KiB
C#
using Zhaizj.Framework;
|
|
using Zhaizj.Framework.Data;
|
|
using System;
|
|
using System.Collections;
|
|
using System.Data;
|
|
using System.Collections.Generic;
|
|
using Zhaizj.Framework.ORM.Caching;
|
|
|
|
namespace Zhaizj.Framework.ORM.Operation {
|
|
|
|
|
|
internal class FindByOperation {
|
|
|
|
private static readonly ILog logger = LogManager.GetLogger( typeof( FindByOperation ) );
|
|
|
|
public static Query Find( String condition, ObjectInfo state ) {
|
|
Includer includer = state.Includer;
|
|
if (strUtil.HasText( includer.SelectedProperty ) && (includer.SelectedProperty != "*")) {
|
|
Query query = new Query( condition, state );
|
|
return query.select( includer.SelectedProperty );
|
|
}
|
|
return new Query( condition, state );
|
|
}
|
|
|
|
internal static IList Find( ConditionInfo condition ) {
|
|
|
|
IList results = ObjectPool.FindByQuery( condition );
|
|
if (results != null) return results;
|
|
|
|
if ("*".Equals( condition.SelectedItem )) {
|
|
condition.State.includeAll();
|
|
}
|
|
else {
|
|
condition.State.include( SqlBuilder.GetIncludeProperty( condition.SelectedItem ) );
|
|
}
|
|
|
|
IList includeEntityPropertyList = condition.State.Includer.EntityPropertyList;
|
|
IDbCommand cmd = DataFactory.GetCommand( condition.Sql, DbContext.getConnection( condition.State.EntityInfo ) );
|
|
foreach (String key in condition.Parameters.Keys) {
|
|
DataFactory.SetParameter( cmd, key, condition.Parameters[key] );
|
|
}
|
|
|
|
Hashtable hashtable = new Hashtable();
|
|
IDataReader record = null;
|
|
results = new ArrayList();
|
|
try {
|
|
record = cmd.ExecuteReader();
|
|
while (record.Read()) {
|
|
EntityPropertyUtil.Fill_EntityProperty_Ids( record, includeEntityPropertyList, ref hashtable );
|
|
results.Add( FillUtil.Populate( record, condition.State ) );
|
|
}
|
|
}
|
|
catch (Exception ex) {
|
|
logger.Error( ex.Message );
|
|
logger.Error( ex.StackTrace );
|
|
throw ex;
|
|
}
|
|
finally {
|
|
OrmHelper.CloseDataReader( record );
|
|
}
|
|
|
|
if (results.Count == 0) return results;
|
|
|
|
return EntityPropertyUtil.setEntityProperty( condition.State, results, hashtable );
|
|
}
|
|
}
|
|
}
|
|
|