簡體   English   中英

為什么.Equals在這個LINQ示例中不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM