gpt4 book ai didi

c# - 如何使用 nHibernate 和 QueryOver API 获得不同的结果?

转载 作者:IT王子 更新时间:2023-10-29 03:51:35 25 4
gpt4 key购买 nike

我有这个存储库方法

    public IList<Message> ListMessagesBy(string text, IList<Tag> tags, int pageIndex, out int count, out int pageSize)
{
pageSize = 10;
var likeString = string.Format("%{0}%", text);
var query = session.QueryOver<Message>()
.Where(Restrictions.On<Message>(m => m.Text).IsLike(likeString) ||
Restrictions.On<Message>(m => m.Fullname).IsLike(likeString));

if (tags.Count > 0)
{
var tagIds = tags.Select(t => t.Id).ToList();
query
.JoinQueryOver<Tag>(m => m.Tags)
.WhereRestrictionOn(t => t.Id).IsInG(tagIds);
}

count = 0;
if(pageIndex < 0)
{
count = query.ToRowCountQuery().FutureValue<int>().Value;
pageIndex = 0;
}
return query.OrderBy(m => m.Created).Desc.Skip(pageIndex * pageSize).Take(pageSize).List();
}

您提供自由文本搜索字符串和标签列表。问题是如果一封邮件有多个标签,它会被重复列出。我想要一个基于 Message 实体的独特结果。我看过了

Projections.Distinct

但是它需要一个属性列表来解决不同的问题。 This Message is my entity root 有没有一种方法可以在不提供所有实体属性的情况下获得这种行为?

提前致谢,安德斯

最佳答案

如果您使用的是 ICriteria API,则需要:

.SetResultTransformer(new DistinctEntityRootTransformer())

如果您使用 QueryOver API,您需要:

.TransformUsing(Transformers.DistinctRootEntity)

但要注意,这一切都发生在客户端,所以所有重复的行仍然会被提取。

关于c# - 如何使用 nHibernate 和 QueryOver API 获得不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4615675/

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