【问题标题】:RavenDB Request URL Too LongRavenDB 请求 URL 太长
【发布时间】:2012-03-18 18:28:03
【问题描述】:

我收到请求 URL 太长的问题,想知道是否有人对我如何改进现有内容有任何想法...

在这里,我返回一个属性 id 的列表

var propertiesAlreadySentQuery = Session.Query<Domain.ClientProperty>().Where(x => x.ClientId == clientid);
var propertiesAlreadySent = new int[propertiesAlreadySentQuery.Count()];
var t = 0;
foreach (var i in propertiesAlreadySentQuery)
{
    propertiesAlreadySent[t] = i.PropertyId;
    t++;
}

现在,我要做的是返回一个属性列表并过滤掉那些已经发送的属性(因此命名!)

var results = from p in Session.Query<Domain.Property>()
                                          where
                                              (p.Development.Latitude >= minLat && p.Development.Latitude <= maxLat) &&
                                              (p.Development.Longitude >= minLong && p.Development.Longitude <= maxLong)
                                          select p;

var propertiesNotSent = results.Where(x => !x.PropertyId.In<Int32>(propertiesAlreadySent));

问题是,propertiesAlreadySent 中返回的属性 ID 的数量可能非常多,而且我得到的请求 URL 太长。

任何想法我可以如何改进它以不遇到这个问题?

谢谢

【问题讨论】:

  • 你的 results.Where() 是 IQueryable 还是 IEnumerable?
  • 我希望能提供帮助,但我只使用了 Raven .NET API。作为一种解决方法,我认为您可以检索所有内容,然后在内存中进行过滤。我很想在这里看到答案...

标签: c# url request ravendb


【解决方案1】:

马特, 您可以在 In() 元素中使用的项目数量受到限制。 我不明白你在做什么,你能解释一下你的代码背后的意图吗?

【讨论】:

  • 好的,让我试着解释一下 - 我有一个已经发送的属性详细信息列表 - 我想从人们尚未发送的新属性详细信息中排除那些。问题是,有 3000 多个文档,虽然我按其中一个字段进行过滤,但它可以返回很多已经发送的属性。那有意义吗?我已经想到了一种解决方法 - 现在只需测试它是否有效..
  • 看起来将数据集限制在另一个集合上已经成功了。 RavenDB 的超级粉丝,喜欢它本质上让你编写更好的代码的方式。当你的老板在你的背上说“它完成了吗”时,背部也会疼痛......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多