作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个类到一个表的映射;不幸的是,这个表有 110 多个列,查询需要很长时间,尤其是当大多数时候我只想查看 <10 列时。
我的问题是查询是根据用户想要查看的内容动态生成的。我真的不能用不同的列创建不同的映射,因为会有非常多的组合。我正在使用标准 API 来生成查询。我还可以使用它来只选择用户想要的列吗?还是其他什么方法?
谢谢
最佳答案
使用 LINQ 很容易做到(假设您使用的是 NHibernate 3.0 或更高版本):
var products = from p in Session.Query<Product>()
where // ...some query (snip)
select new
{
Name = p.ProductName,
Description = p.ShortDesc,
Price = p.Price,
Units = p.Quantity
};
此外,如果您使用的是 HQL,您可以像使用 T-SQL 一样只选择您需要的列,但使用 Transformer
来获取强类型对象:
首先用缩小的列创建一个类:
public class ProductReport
{
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public int Units { get; set; }
}
然后你的查询:
string hql = "select p.ProductName as Name, p.ShortDesc as Description ...(snip) " +
"from Product p " +
"where ...some query (snip)";
IQuery query = Session.CreateQuery(hql)
.SetResultTransformer(Transformers.AliasToBean<ProductReport>());
IList<ProductReport> products = query.List<ProductReport>();
只需确保查询中的别名(如名称、描述等)与类中的属性名称相匹配。
关于c# - 如何在我的 NHibernate 查询中只选择几列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111190/
我正在尝试使用描述的方法将数据表转换为字典 here , 但我得到一个错误 Cannot implicitly convert type System.Collections.Generic.Dict
我想在几个列上使用 orderBY,但它们应该像一列一样。 该表看起来像这样: col1 | col2 5 | 2 | | 3 7 | | 1 | 1
我有这张表 mytable: +----+--------------------------------------+ | id | date1 | date2 | date3
我是一名优秀的程序员,十分优秀!