2014-04-06 141 views
0

我有這個List包含Story類的實例:搜索對象的列表<Object>

List<Story> Stories = new List<Story>(); 

public class Story 
{ 
    public string Id { get; set; } 
    public double Height { get; set; } 
    public double Elevation { get; set; } 
} 

列表中的每個實例是唯一的:

Stories = {Story1, Story2, ...} 

現在,在另一種方法我想在List來搜索特定Story而整個對象分配到新創建的對象

Story st = Find a Story in the Stories that its Story.Id=="Story2" 

我怎樣才能做到這一點?

回答

2

您可以使用LINQ有兩種方法的語法:

Story st = Stories.Where(x => x.Id == "Story2").FirstOrDefault(); 

或查詢語法:

Story st = (from story in Stories 
       where story.Id.Equals("Story2") 
       select story).FirstOrDefault(); 

您可以在聲明的末尾使用Single()First()FirstOrDefault()SingleOrDefault。這是他們之間的差異。

  • First() - 拋出如果是空的/沒有找到,不投,如果重複
  • FirstOrDefault() - 返回默認是空的/沒有找到,如果複製
  • Single()不會拋出 - 如果是空的/沒有找到罰球,將引發存在重複
  • SingleOrDefault() - 如果是空的/沒有發現返回默認情況下,如果存在重複
+0

謝謝。第一個答案沒有奏效。它正在工作。 – Vahid

+0

@Vahid沒問題,我知道了。 ) –

+1

感謝您的完整的答案。 – Vahid

1

因爲「在每一個實例的投該列表是獨特的」

Story st = Stories.FirstOrDefault(x=>x.Id == "Story2"); 

或者

Story st = Stories.Single(x=>x.Id == "Story2"); 

的區別是第一個將返回默認值,如果沒有找到,第二個將引發異常在這種情況下

+0

謝謝。這工作完美。 – Vahid

1

使用LINQ:

var story = stories.Where((p) => p.Id == "Goldilocks").FirstOrDefault();