2017-04-03 51 views
-2

我在Visual Studio 2015中使用C#。 我有一個List<MagicItem> magicItemList,我正在嘗試使用Linq執行一個簡單查詢來獲取與用戶輸入的Id匹配的對象。 這是我的代碼:Linq中的C#查詢

int itemId = Convert.ToInt32(Console.ReadLine()); 

var query = from MagicItem magicItem in magicItemList 
       where magicItem.Id == itemId 
       select magicItem; 

,混淆我是query的類型是System.Collections.Generic.IEnumerable,所以我不能獲取任何其屬性爲普通對象的事情。

有沒有一種方法可以將它轉換爲一個普通的對象?提前致謝。

這是我MagicItem類:

class MagicItem 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public int StockLevel { get; set; } 
    } 

回答

0

您可以使用FirstOrDefault()讓您的項目。如果沒有id的項目,你會得到null。這就是爲什麼你必須檢查null。

var item = magicItemList.FirstOrDefault(x => x.Id = itemId); 
if(item != null) 
{ 
    //do something with item 
} 

與您的代碼你得到一個集合,因爲你正在檢查一個屬性,你會得到你的收藏中的所有項目被匹配這個屬性。

欲瞭解更多信息,看看在MSDN

0

這是要獲取符合您的條件magicItem.Id == itemId所有實例。 如果您確定這將是一個單一的項目,我建議使用query.FirstOrDefault()來獲得該項目。

0

的問題是,你不會本身獲得一個元素:在代碼級別是未知的ID是唯一

您可以使用.First().FirstOrDefault()獲得符合條件的第一要素

var query = (from MagicItem magicItem in magicItemList 
       where magicItem.Id == itemId 
       select magicItem).First();