在 Linq 中,如何在不使用 Count(predicate) 的情况下查找集合是否包含元素?

发布于 2024-09-10 10:04:48 字数 456 浏览 2 评论 0原文

由于 IEnumerable.Contains() 方法不接受谓词作为参数,因此大多数人使用以下代码来检查是否存在与条件匹配的内容:

// ProductId is unique.
if (Products.Count(c => c.ProductId = 1234) == 1)
{
    // Products list contains product 1234.
}

此代码强制遍历每个产品并检查它是否匹配。确实没有必要这样做。

当查看 Linq-to-SQL 生成的 SQL 代码时,也存在同样的问题。发送 select count(*) ... where ProductId = @p0 语句,而不是 if issues

如何通过 Linq 查找集合中是否包含与条件匹配的项目,而无需遍历集合中的每个元素并计算匹配的数量?

Since IEnumerable.Contains() method does not accept a predicate as an argument, Most people use the following code to check the existence of something matching a condition:

// ProductId is unique.
if (Products.Count(c => c.ProductId = 1234) == 1)
{
    // Products list contains product 1234.
}

This code forces to walk through every product and to check if it matches. There is really no need to do so.

When looking at Linq-to-SQL generated SQL code, there is the same problem. A select count(*) ... where ProductId = @p0 statement is sent, instead of if exists.

How is it possible through Linq to find if a set contains an item which matches a condition, without having to walk through every element in a set and count the number of matches?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恏ㄋ傷疤忘ㄋ疼 2024-09-17 10:04:48

您可以尝试

if (Products.Any(c => c.ProductId = 1234))
{
//do stuff
}

不确定是否使用 if 存在,但您可以尝试查看发送的内容。

You could try

if (Products.Any(c => c.ProductId = 1234))
{
//do stuff
}

Not sure if that uses an if exists, but you can try and see what is sent.

雪若未夕 2024-09-17 10:04:48

如果您尝试检查条件,可以使用以下代码,

if(Products.Any(p => p.ProductID == 1234))
{
    //do sth
}

但如果您想检查是否存在任何没有任何条件(如 p.ProductID == 1234)的行,您应该执行以下操作

if(Products.Any(p => p != null))
{
//do sth
}

If you are trying to check a condition you can use the following code

if(Products.Any(p => p.ProductID == 1234))
{
    //do sth
}

but if you want to check if any rows exist without any condition like p.ProductID == 1234 you should do the following

if(Products.Any(p => p != null))
{
//do sth
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文