重写Linq语句

时间:2011-12-13 11:56:24

标签: c# linq

以下是我目前的情况:

from s in domainThreads.Values
where (s.IsAvailable)
select s;

但我还在学习Linq,并相信我可以在一条线上完成所有工作。以下看起来是否正确?

domainThreads.Values.Where(s => s.IsAvailable).Any();

我需要.Any()吗?

9 个答案:

答案 0 :(得分:3)

Any()返回一个布尔值,表示给定集合中是否有任何实体。

原始LINQ表达式的等价物只是:

domainThreads.Values.Where(s => s.IsAvailable)

答案 1 :(得分:2)

这两者并不相同。

第一个返回Values所有s.IsAvailable

第二个返回是否有任何这样的值。

正确的转换是:

domainThreads.Values.Where(s => s.IsAvailable)

转换为:

domainThreads.Values.Where(s => s.IsAvailable).Select(s => s)

无论如何,原始查询的转换是什么。

答案 2 :(得分:1)

您不需要Any() - 将返回bool,指示是否有任何元素满足条件。

相反,只需:

domainThreads.Values.Where(s => s.IsAvailable)

答案 3 :(得分:1)

domainThreads.Values.Where(s => s.IsAvailable)

就够了。

答案 4 :(得分:1)

Any()返回bool值,但您的原始查询会返回一个数据集。所以只需使用Where()

var result = domainThreads.Values.Where(s => s.IsAvailable);
当您需要确保至少单个项目满足条件时,

Any()会有所帮助

答案 5 :(得分:1)

试试这个

var obj = domainThreads.Values.Where(s => s.IsAvailable == true).Select(o => o);

答案 6 :(得分:1)

如果您致电Any(),则会返回bool,表示您至少有一件商品。

domainThreads.Values.Where(s => s.IsAvailable);
  • 这个表达式就足够了,它等同于LINQ语句。

答案 7 :(得分:1)

Any()返回一个布尔值,如果结果包含一个或多个项,则为true。

var elements = from s in domainThreads.Values
where (s.IsAvailable)
select s;
//elements now contains a list of objects.

这相当于:

elements = domainThreads.Where(s => s.IsAvailable);

答案 8 :(得分:0)

看起来却不一样。结果是boolean,如果集合包含任何元素,则返回true。

你可以写这样的东西,但是真的值得付出努力吗?

var result = domainThreads.Values.Where(s => s.IsAvailable).Select(s => s);

或更短:

var result = domainThreads.Values.Where(s => s.IsAvailable);

编辑:如果你只想要一行代码,你也可以写:

from s in domainThreads.Values where s.IsAvailable select s; 

它更具可读性,最终会生成相同的代码。