2014-09-24 64 views
1

我有一个映射(使用Fluent Nhibernate)到数据库中的视图的实体。
视图有很多列,但用户可以选择他想要在报表中看到的列。出于性能原因,我希望生成的数据库查询仅包含这些列。
我认为这是可以使用QueryOver <>来完成,这里explianed:How to select only a few columns in my NHibernate query?
的问题是,我需要获得一个IQueryable的分页和排序,所以我用LINQ Session.Query <>扩展方法。
我需要一种方法将QueryOver转换为IQueryable或将投影直接应用于IQueryable。由于要选择的列是动态的,因此我无法创建新的实体类或新的映射。
谢谢仅选择Nhibernate中的特定列IQueryable

+0

你可以检查[this](http://stackoverflow.com/a/25972767/1679310)。与NHiberante IQueryable实现的基本投影应该开箱即用 – 2014-09-24 14:02:14

+0

问题是,我有列显示为一个字符串列表,我不知道如何在IQueryable选择使用该列表 – 2014-09-24 14:40:15

+1

这是Criteria API和使用字符串的投影的最佳选择。有了IQueryable,你将不得不创建自己的表达式构建器......非常具有挑战性,但并不难。无论如何,字符串常量属性名称===最好的是[标准API](http://nhforge.org/doc/nh/en/index.html#querycriteria-projection) – 2014-09-24 14:42:02

回答

0

你真的需要使用LINQ吗?如果是这样,请查看基于Microsoft代码的System.Linq.Dynamic NuGet包。我写了一些可以帮助你的帖子,例如:Dynamic Linq Extension Method。不过,您可以使用Criteria或HQL做得更好。