C# 使用条件api返回未映射对象的NHibernate查询
我想查询nhibernate映射类,但结果应该是一个未映射的对象。映射和未映射的类如下所示:C# 使用条件api返回未映射对象的NHibernate查询,c#,nhibernate,nhibernate-criteria,C#,Nhibernate,Nhibernate Criteria,我想查询nhibernate映射类,但结果应该是一个未映射的对象。映射和未映射的类如下所示: [Class(NameType = typeof(ClassA)] public class ClassA { [Cache(0, Usage = CacheUsage.ReadWrite)] [Id(1, Name = "Id", UnsavedValue = null)] [Generator(2, Class = "native")] public virtual
[Class(NameType = typeof(ClassA)]
public class ClassA
{
[Cache(0, Usage = CacheUsage.ReadWrite)]
[Id(1, Name = "Id", UnsavedValue = null)]
[Generator(2, Class = "native")]
public virtual long? Id { get; set; }
[Property]
public virtual string PropertyA { get; set; }
[Property]
public virtual string PropertyB { get; set; }
}
public class ClassB
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
public int Number { get; set; }
}
我用这个方法得到我想要的结果:
public ICollection<ClassB> Group()
{
var result =
Session.CreateCriteria(typeof(ClassA)).SetProjection(
Projections.ProjectionList().Add(Projections.RowCount(), "Number")
.Add(Projections.GroupProperty("PropertyA"))
.Add(Projections.GroupProperty("PropertyB")));
return
(result.List().Cast<IList>().Select(
entry =>
new ClassB {
Number = (int)entry[0],
PropertyA = (string)entry[1],
PropertyB = (string)entry[2]
}
)).ToList();
}
公共ICollection组()
{
var结果=
Session.CreateCriteria(typeof(ClassA)).SetProjection(
Projections.ProjectionList().Add(Projections.RowCount(),“Number”)
.Add(Projections.GroupProperty(“PropertyA”))
.Add(Projections.GroupProperty(“PropertyB”));
返回
(result.List().Cast().Select(
条目=>
新B级{
Number=(int)条目[0],
PropertyA=(字符串)条目[1],
PropertyB=(字符串)条目[2]
}
)).ToList();
}
这很好,但是使用criteria api不是有更直接的方法吗?是的,就这么做吧
result.SetResultTransformer(Transformers.AliasToBean<ClassB>());
result.List<ClassB>();
result.SetResultTransformer(Transformers.AliasToBean());
result.List();
您还需要将属性投影包装为别名
Projections.Alias(Projections.GroupProperty(“PropertyA”),“PropertyA”)
是的,就这么做吧
result.SetResultTransformer(Transformers.AliasToBean<ClassB>());
result.List<ClassB>();
result.SetResultTransformer(Transformers.AliasToBean());
result.List();
您还需要将属性投影包装为别名
Projections.Alias(Projections.GroupProperty(“PropertyA”),“PropertyA”)
谢谢,这很好用。我只需给投影一个explixit别名就可以让它正常工作,如下所示:.Add(projections.GroupProperty(“PropertyA”),“PropertyA”)
谢谢,效果非常好。我只需给投影一个explixit别名就可以让它工作,如下所示:.Add(projections.GroupProperty(“PropertyA”),“PropertyA”)