我想算一下这个:
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
}
答案 0 :(得分: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中,使用Any
比使用Count() > 0
具有非常真实的性能优势。在将查询转换为不同形式(例如SQL)的提供程序中,可能没有性能的好处,但是在确切地说出您感兴趣的内容时,有一个清晰度的好处 - 你真的不在乎计数,只关心任何匹配的项目。