2016-03-03 204 views
0

我需要使用嵌套linq查詢來查找匹配的字符串。2個列表的嵌套LINQ查詢

我目前有2個字符串的列表,其中一個是所有的,另一個只有3個。我試過很多選項,但我不明白這些是如何工作的。

這可能是一個非常容易的錯誤,但我對C#仍然很陌生,而且我每天都在學習。

這是我得到了多少,但我堅持在looseTracks錯誤。

public static void printTracks() 
{ 

    List<string> allTracks = new List<string>(); 
    //This list is filled with strings (Track titles) 
    List<string> looseTracks = new List<string>(); 

    Track track1 = new Track("Smells Like Teen Spirit", "Nirvana", "00:05:02"); 
    Track track2 = new Track("Come as You Are", "Nirvana", "00:03:38"); 
    Track track3 = new Track("Lithium", "Nirvana", "00:04:16"); 
    looseTracks.Add(track1.title); 
    looseTracks.Add(track2.title); 
    looseTracks.Add(track3.title); 

    var query = from tr1 in allTracks 
      from tr2 in tr1.looseTracks //Error! 
      where tr1.Equals(tr2) 
      select tr1; 

    foreach (string s in query) 
    { 
     Console.WriteLine(s); 
    } 
} 

誤差給我此:

錯誤1「字符串」中不包含關於「looseTracks」的定義和沒有擴展方法「looseTracks」接受類型「字符串」的第一個參數可能(您是否缺少使用指令或程序集引用?)C:\ Users \ Gebruiker \ Desktop \ workspace visual studio 2013 \ Practicum 4 \ Program.cs 104 45實習4

我必須使用嵌套查詢,但我只是不知道如何。有人能幫助我嗎?

如果我忘記了一些東西,或者這不起作用,請告訴我!提前致謝!

+1

tr1不包含鬆動軌跡。 looseTracks是一個列表。 – Kramb

回答

0

我想你想要做類似的事情。

var query = from tr1 in allTracks 
      where looseTracks.Contains(tr1.title) 
      select tr1; 

或者只是在方法語法中的以下內容。

var query = allTracks.Where(tr1 => looseTracks.Contains(tr1.title)); 

這是假設allTracksList<Track>looseTracksList<string>

+0

它工作,謝謝!對不起,很愚蠢,仍然在學習如何工作 – RandomStranger

0
//Just imagine this list being filled with 'Track' objects 

我會想像它沒有被「軌跡」對象填充。您將其定義爲字符串列表,而不是軌道列表。

List<Track> allTracks = new List<Track>(); 
List<Track> looseTracks = new List<Track>(); 
+0

你完全正確,我很愚蠢。編輯了OP – RandomStranger