2014-04-06 103 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();