我有一个QueryOver在Nhibernate 3.1中的查询
var q = SessionInstance.QueryOver<Person>()
.Where(p => p.Code == code);
.Select(p => p.Name,p => p.Code);
return q.SingleOrDefault();
这个没有select的查询是正确的,但是select使用此消息有一个运行时错误:无法将类型为'System.String'的对象强制转换为'MyNameSpace.Domain.Entities.Person'。如何选择Person的某个字段?
答案 0 :(得分:1)
您需要明确告诉NHibernate返回数据的类型是什么,因为您选择选择原始实体p.Name
的某些特定属性,P.Code
这些属性必须从新类型返回实体,因此新类型将是新的object
var query = SessionInstance.QueryOver<Person>()
.Where(p => p.Code == code)
.Select(
p => p.Name,
p => p.Code
)
.List<object>();
这将解决您的问题
或者如果您定义了一个新实体来保存新的返回数据,如下所示:
public newPeople
{
public Id { get; set; }
public Nam { get; set; }
}
你可以这样写:
var query = SessionInstance.QueryOver<Person>()
.Where(p => p.Code == code)
.Select(
p => p.Name,
p => p.Code
)
.Select( list =>
new newPeople()
{
Id = (int) list[0],
Name = (string) list[1]
})
.ToList<newPeople>();