2009-10-19 70 views
0
person[] prn = 
new person[] 
{ 
new person { Name = "Robert", RList = 
{new ReceipeList { NameofRecipie = "Coak" }, 
new ReceipeList { NameofRecipie = "Pizza" } } }, 

new person { Name = "Rahim", RList = 
{ new ReceipeList { NameofRecipie = "Coak" }, 
new ReceipeList { NameofRecipie = "OnionBread" }} }, 
}; 

当使用搜索项列表

var query = from lst in prn where(lst.RList.Contains(lstr)) select lst; 

它不返回任何搜索结果中的项目

ReceipeList lstr = new ReceipeList(); 
    lstr.NameofRecipie = "Coak"; 

foreach (var v in query) 
{ 
      Console.Write(v.Name.ToString()+" ordered :"); 

      foreach(ReceipeList lst in v.RList) 
      { 
       Console.Write(lst.NameofRecipie.ToString()+","); 
      } 
      Console.WriteLine(); 
} 

回答

3

这不起作用,因为您正在搜索ReceipeList的特定实例(通过引用)。因此,您的查询将仅返回具有您的特定lstr ReceipeList实例的值,而不是与您指定的值相同的ReceipeList。

你可以做这项工作通过重写ReceipeList Equals,或重新加工您的查询:

string lstr = "Coak"; 
var query = from lst in prn 
      where lst.RList.Any(r => r.NameofRecipie == lstr) 
      select lst; 

这工作的,而不是因为它使用Any()方法,通过一个谓语搜索ReceipeList的情况下,搜索特定的实例。

0

Im不知道是否,但你也可以看看this也许有一点帮助?