简单的LINQ计数,或者我认为

时间:2013-09-04 19:39:22

标签: c# linq entity

我想算一下这个:

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
}

1 个答案:

答案 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)的提供程序中,可能没有性能的好处,但是在确切地说出您感兴趣的内容时,有一个清晰度的好处 - 你真的不在乎计数,只关心任何匹配的项目。