我正在使用包装器从表用户中获取一些数据
IQueryable<StarGuestWrapper> WhereQuery =
session.Linq<User>().Where(u => u.HomeClub.Id == clubId && u.IsActive).Select(
u =>
new StarGuestWrapper()
{
FullName = u.Name + " " + u.LastName,
LoginTime = u.SomeDateTime,
MonthsAsMember = u.SomeIntergerValue,
StarRating = u.SomeOtherInteregValue,
UserPicture = u.Photo.PhotoData,
InstructorFullName = u.SomeInstructorName,
TalkInteractionDuringSession = u.SomeBoolValue,
GoalInteractionDuringSession = u.SomeOtherBoolValue
});
我将它用作 IQueryable 没有问题,因此我可以在实际运行查询之前做一些有用的事情。喜欢 :
WhereQuery.Skip(startRowIndex).Take(maximumRows).ToList();
等等。
在查询中使用“where”语句会出现问题。例如:
WhereQuery.Where(s => s.StarRating == 1)
将在运行时抛出一个异常,即用户表中不存在“StarRating” -当然它不是包装器属性。如果我通过以下方式实现查询,它将起作用
WhereQuery.AsEnumerable().Where(s => s.StarRating == 1)
但随后它失去了使用 IQueryable 的所有感觉,我不想这样做。
奇怪和有趣的是,并非包装器中的所有属性都抛出错误,所有布尔值都可以在 where 语句中使用。例子 :
WhereQuery.Where(s => s.TalkInteractionDuringSession)
它在 EntityFramework 中有效,为什么在 NHibernate 中会出现此错误以及如何使其按我想要的方式工作?