gpt4 book ai didi

c# - 如何在我的 NHibernate 查询中只选择几列?

转载 作者:太空狗 更新时间:2023-10-29 17:31:01 24 4
gpt4 key购买 nike

我有一个类到一个表的映射;不幸的是,这个表有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com