2016-03-03 2 views
0

Мне нужно использовать вложенный запрос linq для поиска соответствующих строк.Вложенный запрос LINQ для 2 списков

В настоящее время у меня есть 2 списка со строками, один со всеми из них, а другой - 3. Я пробовал много вариантов, но я просто не понимаю, как это работает.

Это, наверное, очень простая ошибка, но я все еще новичок в C#, и каждый день я учусь.

Вот как далеко я получил, но я застрял на ошибке freeTracks.

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 \ рабочее пространство Visual Studio 2013 \ практикум 4 \ Program.cs 104 45 практикум 4

я должен использовать вложенный запрос, но я просто не знаю, как это сделать. Есть ли кто-нибудь, кто может мне помочь?

Если я что-то забыл или если это не сработает, сообщите мне об этом! Заранее спасибо!

+1

tr1 не содержит свободные треки. freeTracks - это список. – Kramb

ответ

0

Я думаю, вы хотите что-то сделать.

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

Или просто следующее в синтаксисе метода.

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

Это предполагает, что allTracks является List<Track> и looseTracks является List<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

Смежные вопросы