Jac*_*cob 5 c# nhibernate linq-to-entities linq-to-nhibernate
我使用包装器从表User获取一些数据
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
});
Run Code Online (Sandbox Code Playgroud)
我使用它作为IQueryable没有问题所以我可以在实际运行查询之前做有用的事情.喜欢 :
WhereQuery.Skip(startRowIndex).Take(maximumRows).ToList();
Run Code Online (Sandbox Code Playgroud)
等等.
使用查询中的"where"语句会出现问题.例如:
WhereQuery.Where(s => s.StarRating == 1)
Run Code Online (Sandbox Code Playgroud)
将在运行时抛出异常,在User表中不存在'StarRating' - 当然它不是一个包装器属性.如果我实现查询,它将起作用
WhereQuery.AsEnumerable().Where(s => s.StarRating == 1)
Run Code Online (Sandbox Code Playgroud)
但是它失去了使用IQueryable的所有感觉,我不想这样做.
奇怪而有趣的是,并非所有属性都来自包装器抛出错误,所有bool值都可以在where语句中使用.示例:
WhereQuery.Where(s => s.TalkInteractionDuringSession)
Run Code Online (Sandbox Code Playgroud)
它在EntityFramework中工作,为什么我在NHibernate中得到这个错误以及如何让它以我想要的方式运行?
请记住,较旧的 nHibernate Linq 提供程序只是部分实现,并且不再积极开发。现在正在开发一个新的、更完整的 linq 提供程序,并将成为 NH3.0 的一部分(您可以检查主干并构建它,看看它是否解决了这个问题)。
我的建议是更改代码以在您明确希望访问数据库时调用 ToList() 。您将从存储库传回一个未来有价值的查询,此时从技术上讲,该查询可能会发生任何事情。即使 EF 和 LINQ2SQL 也无法将任何可能的 linq 查询转换为 SQL。
我确实意识到这不是您想要做的,但我认为您正在尝试改变框架以一种根本不自然的方式做一些事情。
归档时间: |
|
查看次数: |
268 次 |
最近记录: |