2017-09-25 54 views
-2

我想從JSON文件中提取特定國家/地區名稱的國家/地區縮寫。這裏是我的JSON文件:LINQ查詢返回null,從JSON文件中提取對象屬性值

[ 
{ 
    "country": "Iceland", 
    "abbr": "IS" 
}, 
{ 
    "country": "Kosovo", 
    "abbr": "KS" 
}, 
{ 
    "country": "Belgium", 
    "abbr": "BE" 
    },... 
] 

這裏是國家的模式:我使用下面的LINQ查詢提取給定的縮寫

public class Country 
{ 
    public string country { get; set; } 
    public string abbr { get; set; } 
} 

,這是返回null的變量簡稱:

var abbreviation = from n in countries 
        where n.country.Equals(selectedCountry) 
        select n.abbr; 

我能夠檢索coutries列表(LINQ查詢的第一行,我使用調試器進行檢查),並且我有selectectedCountry等於「冰島」。所以我懷疑這個問題來自LINQ查詢的最後兩行,我不太熟悉LINQ查詢,所以我不知道這是否合法。我在單個數據表上操作,所以我不知道這是否意味着我應該使用特定類型的查詢。

+1

selectedCountry的值是什麼,確保它不包含空格,並且應該區分大小寫。 –

+0

這完全取決於您如何解析JSON。 – nbokmans

+0

所選國家的值是「Iceland」,它存在於我的JSON文件中 – Mouna

回答

0

如果我正在調試它,我會在查詢之前和之後設置斷點,以查看它所指的數據的外觀。

var abbreviation = (from n in countries 
        where n.country 
        .Equals(selectedCountry, StringComparison.InvariantCultureIgnoreCase) // ignore case 
        select n.abbr).FirstOrDefault(); // no duplicates expected 

這沒有測試,但應該工作。

+0

謝謝,爲我工作!現在我要做的另一LINQ查詢,但這個應該返回一個IEnumerable :IEnumerable的 EuropeanAirports = IEnumerable的((從機場 n,其中n.iso.Equals(簡稱,StringComparison.InvariantCultureIgnoreCase) 選擇N).FirstOrDefault ());鑄造不起作用你知道我怎樣才能使這個LINQ查詢返回一個IENUMERABLE – Mouna

+0

FirstOrDefault()返回一個Airport類型的對象。要返回IEnumerable,你會想離開它。 –

+0

@Mouna你需要花更多的時間閱讀你實際調用的代碼的文檔。 – Trioj