1

我正在尝试对此进行计数:

Model.Version.Where(model => model.revision != Model.revision).Count();

但是它在 VS 中告诉我我不能使用 Lambda 表达式。

该模型的类型是 Documents,它以 Version 为键。

对于版本大于模型版本的模型文档,我需要版本表中任何文档的计数。

这将是 0 或 1,我想有时可能会高于 1。

我究竟做错了什么?

if (Model.Version.Where(model => model.revision > Model.revision).Count() > 0)
{
     // do something
}
4

1 回答 1

7

正如其他人所说,您的真实代码应该没问题:听起来问题只是您试图在调试器中而不是在普通代码中执行它。就我个人而言,我总是对试图在调试器中做得太过分持怀疑态度——它当然很有用,但如果事情出乎意料,我总是会看看相同的代码是否可以作为真实程序的一部分,而不是假设该方法存在根本性错误。调试器必须在与正常编译和执行过程完全不同的约束条件下工作。

同样,正如其他人所说,使用Any()比使用Count() > 0. 然而,更简洁的是使用Any接受谓词的重载:

if (Model.Version.Any(model => model.revision > Model.revision))
{
    ...
}

但是请注意,这与您的初始谓词并不完全相同,后者要求具有不同修订版而不是更高修订版的任何版本。您可能想要:

if (Model.Version.Any(model => model.revision != Model.revision))
{
    ...
}

值得注意的是,在 LINQ to Objects 中, usingAny可以比 using 具有非常实际的性能优势Count() > 0。在将查询转换为不同形式(例如 SQL)的提供程序中,可能没有性能优势,但准确地说出您感兴趣的内容会带来清晰的好处 - 您并不真正关心计数,您只关心是否有任何匹配的项目。

于 2013-09-04T19:47:37.380 回答