2016-03-03 116 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