这是我目前有:重写一个LINQ声明
from s in domainThreads.Values
where (s.IsAvailable)
select s;
,但我仍然在学习LINQ和相信,我可以得到它全部在一行。以下看起来是否正确?
domainThreads.Values.Where(s => s.IsAvailable).Any();
我需要.Any()
吗?
这是我目前有:重写一个LINQ声明
from s in domainThreads.Values
where (s.IsAvailable)
select s;
,但我仍然在学习LINQ和相信,我可以得到它全部在一行。以下看起来是否正确?
domainThreads.Values.Where(s => s.IsAvailable).Any();
我需要.Any()
吗?
Any()
返回一个布尔值,指示给定集合中是否存在任何实体。
你原来的LINQ表达的等效只会是:
domainThreads.Values.Where(s => s.IsAvailable)
两者是不等价的。
第一次返回全部Values
其中s.IsAvailable
。
第二个返回是否有任何这样的值。
正确的转换:
domainThreads.Values.Where(s => s.IsAvailable)
翻译为:
domainThreads.Values.Where(s => s.IsAvailable).Select(s => s)
这是什么原始查询被转换成反正。
你不需要Any()
- 这将返回一个bool
指示是否有任何元素满足条件。
相反,只是做:
domainThreads.Values.Where(s => s.IsAvailable)
它看起来却是不一样的。结果是布尔值,如果集合包含任何元素,则返回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;
它更可读,并产生相同的代码在最后。
@downvoter:我的回答有什么问题? – slfan
domainThreads.Values.Where(s => s.IsAvailable)
就够了。
Any()返回一个bool
值,但您的原始查询返回一个数据集。因此,只要使用的时候,你只需要确保至少单个项目满足条件
试试这个
var obj = domainThreads.Values.Where(s => s.IsAvailable == true).Select(o => o);
我发现有人投下了这个答案。这个答案有什么错误吗? –
我提高了你的答案,因为我没有看到任何错误。唯一的是你没有得到一个对象,但结果是一个IEnumerable
ohh .. var obj会给你匿名类型的对象 –
如果你打电话Any()
返回bool
这表明Where()
var result = domainThreads.Values.Where(s => s.IsAvailable);
Any()
将是有益的你至少有一个项目。
domainThreads.Values.Where(s => s.IsAvailable);
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);
你有没有真正尝试过吗?它恢复了你的期望吗?如果不是,请将*作为您的问题发布。 – ChrisF
我没有与我的Visual Studio。我只是在阅读和学习这个术语。 –