以下是我目前的情况:
from s in domainThreads.Values
where (s.IsAvailable)
select s;
但我还在学习Linq,并相信我可以在一条线上完成所有工作。以下看起来是否正确?
domainThreads.Values.Where(s => s.IsAvailable).Any();
我需要.Any()
吗?
答案 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);
答案 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;
它更具可读性,最终会生成相同的代码。