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

标签 c# linq entity

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

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/

相关文章:

java - 将新的 transient 字段添加到现有的@Enity

jpa - JPA 实体上的空构造函数和 setter

java - Google App Engine 支持的数据存储类型

c# - 有什么是用 C++ 能做而 C# 不能做的吗?

c# - 我想在我的电子邮件中嵌入图片

c# - 遍历两个列表

c# - 根据日、周和月过滤数据

c# - LINQ OrderBy 使用真正的 ASCII 排序忽略大小写

c# - 如何将无触发的.NET Core控制台应用程序实现为连续的Azure WebJob?

c# - Windows 窗体上的 log4net 不写入日志文件