gpt4 book ai didi

ravendb - WebAPI 和 OData - 返回带前提条件的 Queryable

转载 作者:行者123 更新时间:2023-12-02 20:58:36 25 4
gpt4 key购买 nike

我有一个简单的 GET 方法,它返回 IQueryable,并且对查询有一些先决条件:

[Queryable(HandleNullPropagation = HandleNullPropagationOption.False)]
public IQueryable<Message> Get()
{
using (var session = RavenStore.GetSession())
{
var messages = session.Query<Message>().Where(x => x.TargetUserId == this.User.Identity.Name || x.SourceUserId == this.User.Identity.Name);
return messages;
}
}

顺便说一句,这是 RavenDB。我遇到的问题是,执行后用户 ID 被替换为“[EMPTY_STRING]”,因此其运行的实际查询是这样的:

'TargetUserId:[[EMPTY_STRING]] OR SourceUserId:[[EMPTY_STRING]]' on index .....

这显然是错误的。

如果我返回 List 而不是 IQueriable - 它工作正常,因此管道中稍后的某些内容会更改查询。有谁对如何实现这项工作有任何见解吗?

最佳答案

首先将值复制到局部变量时应该可以工作:

var userName = this.User.Identity.Name;
return session.Query<Message>()
.Where(x => x.TargetUserId == userName ||
x.SourceUserId == userName);

这是因为在执行查询时,Raven 客户端查询转换器无法解析谓词中表达的对象。通过将它们复制到局部变量中,您可以将常量值传递到表达式中。

我相信这与关闭有关。也许对表达式树有更直接了解的人可以在评论中更好地解释。

关于ravendb - WebAPI 和 OData - 返回带前提条件的 Queryable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259466/

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