我正在尝试对此进行计数:
Model.Version.Where(model => model.revision != Model.revision).Count();
但是它告诉我在 VS 中我不能使用 Lambda 表达式。
该模型属于文档类型,以版本为键。
我需要版本表中修订版大于模型修订版的模型文档的所有文档数。
这将是 0 或 1,我想有时可能会高于 1。
我做错了什么?
if (Model.Version.Where(model => model.revision > Model.revision).Count() > 0)
{
// do something
}
最佳答案
正如其他人所说,您的真实代码应该没问题:听起来问题只是您试图在调试器中而不是在正常代码中执行它。就我个人而言,我总是对在调试器中做得太过火持谨慎态度——这当然很有用,但如果事情出现意外,我总是会查看相同的代码是否作为真实程序的一部分工作,而不是假设这种方法存在根本性的错误。调试器必须在与正常编译和执行过程完全不同的约束下工作。
同样,正如其他人所说,使用 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 中,使用 Any
比使用 Count() > 0
具有非常实际的性能优势。在将查询转换为不同形式(例如 SQL)的提供程序中,可能没有性能的好处,但是有一个清晰度的好处是准确地说出您感兴趣的内容 -您并不真正关心计数,您只关心是否有任何匹配项。
关于c# - 简单的 LINQ 计数,或者我认为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18622380/