Files
lserp_cs_5.0/插件库/Zhaizj.Framework/ORM/Operation/FindByOperation.cs
T
2026-07-10 15:25:05 +08:00

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 );
}
}
}