public IList<RoomEcologyDto> GetNonassetJoinPersonData(ExpressionCondition<UVNonAssetAll> nonassetCondition)
{
var lambda_contract_effect = bizUTRenterContract.lambda_effect_condition();
var lambda_contract = lambda_contract_effect.ConditionExpression;
var lambda_nonasset = nonassetCondition.ConditionExpression;
UVNonAssetAll a = null;
UTRenterContract b = null;
UTRenterApplyIn c = null;
var sqlQuery = dbAccess.Session.QueryOver(() => a).Where(lambda_nonasset)
.JoinEntityAlias(() => b, Restrictions.And(Restrictions.Where(() => a.keyId == b.NonAssetID), Restrictions.Where(lambda_contract)), JoinType.LeftOuterJoin)
.JoinEntityAlias(() => c, Restrictions.Where(() => c.ID == b.ApplyID), JoinType.LeftOuterJoin);
;
sqlQuery = sqlQuery.Select(
Projections.ProjectionList()
.Add(Projections.RootEntity())
.Add(Projections.Property(nameof(b)+"."+nameof(UTRenterContract.ID)))//=> not error,sql right,but res=[{a:UVNonAssetAll}]
.Add(Projections.Select<UTRenterContract>(x => x.ID), nameof(RoomEcologyDto.renterContractId)) // sqlQuery.List<Hashtable>().error::“could not resolve property: ID of: HYGZFSys.Entity.UVNonAssetAll”
.Add(Projections.Property<UTRenterContract>(x => x.ID), nameof(RoomEcologyDto.renterContractId))// sqlQuery.List<Hashtable>().error could not resolve property: ID of: HYGZFSys.Entity.UVNonAssetAll”
)
;
sqlQuery = sqlQuery.TransformUsing(Transformers.AliasToEntityMap);
var res = sqlQuery.List<Hashtable>();
return new List<RoomEcologyDto>();
}
结束了
必须对齐
public IList<RoomEcologyDto> GetNonassetJoinPersonData(ExpressionCondition<UVNonAssetAll> nonassetCondition)
{
var lambda_contract_effect = bizUTRenterContract.lambda_effect_condition();
var lambda_contract = lambda_contract_effect.ConditionExpression;
var lambda_nonasset = nonassetCondition.ConditionExpression;
UVNonAssetAll a = null;
UTRenterContract b = null;
UTRenterApplyIn c = null;
var sqlQuery = dbAccess.Session.QueryOver(() => a).Where(lambda_nonasset)
.JoinEntityAlias(() => b, Restrictions.And(Restrictions.Where(() => a.keyId == b.NonAssetID), Restrictions.Where(lambda_contract)), JoinType.LeftOuterJoin)
.JoinEntityAlias(() => c, Restrictions.Where(() => c.ID == b.ApplyID), JoinType.LeftOuterJoin);
;
var columns = Projections.ProjectionList();
columns.AddProjectColumnByPropertyFromClass<UVNonAssetAll>(nameof(a));
columns.Add(Projections.Property(nameof(b) + "." + nameof(UTRenterContract.ID)).As(nameof(RoomEcologyDto.renterContractId)));
columns.Add(Projections.Property(nameof(b) + "." + nameof(UTRenterContract.ApplyID)).As(nameof(RoomEcologyDto.renterContractApplyId)));
columns.Add(Projections.Property(nameof(b) + "." + nameof(UTRenterContract.NonAssetID)).As(nameof(RoomEcologyDto.renterContractNonassetId)));
columns.Add(Projections.Property(nameof(c) + "." + nameof(UTRenterApplyIn.ID)).As(nameof(RoomEcologyDto.renterApplyInId)));
columns.Add(Projections.Property(nameof(c) + "." + nameof(UTRenterApplyIn.Name)).As(nameof(RoomEcologyDto.renterApplyInName)));
columns.Add(Projections.Property(nameof(c) + "." + nameof(UTRenterApplyIn.ID)).As(nameof(RoomEcologyDto.renterContractId)));
sqlQuery = sqlQuery.Select(columns);
sqlQuery = sqlQuery.TransformUsing(Transformers.AliasToBean<RoomEcologyDto>());
var res = sqlQuery.List<RoomEcologyDto>();
return res;
}
public static ProjectionList AddProjectColumnByPropertyFromClass<T>(this ProjectionList projection, string alignPrefix = null)
{
var properties = typeof(T).GetProperties();
var propertyNameList = properties.Select(x => x.Name).ToList();
foreach (var propertyName in propertyNameList)
{
string alignName = alignPrefix;
if (!string.IsNullOrEmpty(alignPrefix))
{
alignName = alignPrefix + "." + propertyName;
}
projection.Add(Projections.Property(alignName), propertyName);
}
return projection;
}