为什么这会产生空集?
Object[] types = {23, 234, "hello", "test", true, 23};
var newTypes = types.Select(x => x.GetType().Name)
.Where(x => x.GetType().Name.Equals("Int32"))
.OrderBy(x => x);
newTypes.Dump();
答案 0 :(得分:11)
当您选择时,您将获得IEnumerable<String>
。然后你将列表中的每个字符串的类型(都是“字符串”)并过滤掉它们不等于“Int32”(这是整个列表)。 Ergo ......列表是空的。
答案 1 :(得分:5)
Equals工作得很好,这是你的查询不正确。如果要在列表中选择整数,请使用:
var newTypes = types.Where( x => x.GetType().Name.Equals("Int32") )
.OrderBy( x => x );
答案 2 :(得分:5)
颠倒操作的顺序:
var newTypes = types.Where(x => x is int)
.OrderBy(x => x)
.Select(x => x.GetType().Name);
(请注意,这也使用了直接类型检查,而不是相当特殊的.GetType().Name.Equals(…)
)。
答案 3 :(得分:3)
LINQ的问题是你必须停止用SQL术语思考。在SQL中我们这样想: -
SELECT Stuff
FROM StufF
WHERE Stuff
ORDER BY Stuff
这就是你的代码的样子。但是在LINQ中,我们需要这样思考: -
FROM Stuff
WHERE Stuff
SELECT Stuff
ORDER BY Stuff
答案 4 :(得分:1)
var newTypes = types.Select(x => x.GetType().Name)
.Where(x => x.Equals("Int32"))
.OrderBy(x => x);
答案 5 :(得分:1)
这不起作用,因为Select语句会将集合中的每个值转换为该值的基础类型的名称。生成的集合将仅包含字符串值,因此它们将不具有名称Int32。