[英]Why does .Equals not work in this LINQ example?
為什么這會產生空集?
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>
。 然后你將列表中的每個字符串的類型(都是“字符串”)並過濾掉它們不等於“Int32”(這是整個列表)。 Ergo ......列表是空的。
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
var newTypes = types.Select(x => x.GetType().Name)
.Where(x => x.Equals("Int32"))
.OrderBy(x => x);
這不起作用,因為Select語句會將集合中的每個值轉換為該值的基礎類型的名稱。 生成的集合將僅包含字符串值,因此它們將不具有名稱Int32。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.