2009-10-19 128 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也許有一點幫助?