爲什麼這會產生一個空集?爲什麼.Equals在這個LINQ示例中不起作用?
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();
爲什麼這會產生一個空集?爲什麼.Equals在這個LINQ示例中不起作用?
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();
當你做你的選擇你要的IEnumerable<String>
。然後,您將列表中的每個字符串的類型(全部爲「String」)並將它們過濾出它們不等於「Int32」(這是整個列表)的位置。埃爾戈......名單是空的。
var newTypes = types.Select(x => x.GetType().Name)
.Where(x => x.Equals("Int32"))
.OrderBy(x => x);
這不起作用,因爲Select語句會將集合中的每個值轉換爲該值的基礎類型的名稱。結果集合將只包含字符串值,因此它們永遠不會有名稱Int32。
Equals的工作很好,它是你的查詢是不正確的。如果你想在列表中選擇使用整數:
var newTypes = types.Where(x => x.GetType().Name.Equals("Int32"))
.OrderBy(x => x);
反向操作的順序:
var newTypes = types.Where(x => x is int)
.OrderBy(x => x)
.Select(x => x.GetType().Name);
(請注意,這也採用替代較爲特殊的.GetType().Name.Equals(…)
直下型檢查)。
LINQ的東西是你必須停止思考SQL的條款。在SQL中,我們認爲是這樣的: -
SELECT Stuff
FROM StufF
WHERE Stuff
ORDER BY Stuff
這就是你的代碼的樣子。然而在LINQ中,我們需要這樣思考: -
FROM Stuff
WHERE Stuff
SELECT Stuff
ORDER BY Stuff
是的,你必須記得喜歡悠達的想法 – 2009-11-05 08:55:21
它產生一個空集,因爲不存在Int32類型的字符串。我被迫*猜測*這不是你想知道的,但你沒有說出你想要完成的事情。 – Joren 2009-11-04 17:04:45