gpt4 book ai didi

ravendb - 使用 FindLastIndex 时,Raven 索引创建出现编译错误 CS1977

转载 作者:行者123 更新时间:2023-12-05 06:45:19 27 4
gpt4 key购买 nike

我正在尝试编写一个索引来查看我们的日志,以查找由于经历了一部分流程而不是流程的第二部分而导致不可用的实体,然后使它们可用。我们的导入过程首先发生,然后是我们的清洁过程。经过我们的清洁过程的实体然后被认为是可用的。我想基本上找出那些在上次清洁发生后经历了导入过程(因此重置它们)的实体。

我想出了这张势图:

AddMap<EntityLog>(docs => docs.Where(doc => doc.Details != null)
.Where(doc => doc.Details.Any(d => d.QueueMessage != null && d.QueueMessage.JobsToDo.Contains(JobType.Import)
&& d.Finished != null))
.Where(doc => doc.Details.Any(d => d.QueueMessage != null && d.QueueMessage.JobsToDo.Contains(JobType.Clean)
&& d.Finished != null))
.Where(doc => doc.Details.FindLastIndex(d => d.QueueMessage.JobsToDo.Contains(JobType.Clean) && d.Finished != null) <
doc.Details.FindLastIndex(d => d.QueueMessage.JobsToDo.Contains(JobType.Import) && d.Finished != null))
.Select(found => new
{
found.EntityID,
User = found.Details.Select(d => d.User)
}));

它在 VS 中编译,但是当我尝试创建这个索引时,出现以下错误:

CS1977“如果不先将 lambda 表达式转换为委托(delegate)或表达式树类型,则不能将其用作动态分派(dispatch)操作的参数”

从一些有选择的评论来看,它似乎是我使用 FindLastIndex 的行。通过研究,我知道当您尝试使用您不应该使用的非类型化对象执行某些操作时,就会出现此编译器错误。通过查看输出的 Raven 代码,它使用了很多动态,所以我猜它与此相关。我确实尝试使用它来替代该行:

.Where(doc => Array.FindLastIndex(doc.Details.ToArray(), d => d.QueueMessage.JobsToDo.Contains(JobType.Clean) && d.Finished != null) <
Array.FindLastIndex(doc.Details.ToArray(), d => d.QueueMessage.JobsToDo.Contains(JobType.Import) && d.Finished != null))

但不高兴,我仍然收到相同的错误消息。

如何让这段代码起作用?还是我需要采取完全不同的方法?

感谢任何帮助。

最佳答案

FindLastIndex 是List 上的一个方法,但是我们不知道服务器端的类型是什么,所以不可用。改用 IEnumerable 上的扩展方法。

关于ravendb - 使用 FindLastIndex 时,Raven 索引创建出现编译错误 CS1977,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077498/

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