2013-05-15 6 views
0

, поэтому я новичок в LINQ и просто сделал тестовый запрос из файла csv, который отображает его результаты в сетке данных. Я использовал простые инструкции Where, такие как Where sys = «System 1», без проблем. Когда дело дошло до нескольких тестов, где я не знал, сколько систем я бы проверял, я застрял.VB: Фильтровать запрос linq со списком

Как настроить, где следует проверять список?

Where listSystems.Contains(sys) 

Это то, что я думал, должно работать, но оно не дает никаких результатов.

Полный код

Dim lstSystem As New List(Of String) 

lstSystem.Items.Add("System 1") 
lstSystem.Items.Add("System 4") 
lstSystem.Items.Add("System 5") 
lstSystem.Items.Add("System 7") 

Dim Test As String() = System.IO.File.ReadAllLines("test.csv") 
Dim query = From item In Test 
      Let data = item.Split(","c) 
      Let name = data(0) 
      Let sys = data(1) 
      Let price = data(2) 
      Where lstSystem.Contains(sys) 
      Order By name, sys, price Ascending 
      Select name, sys, price 
    dgvResults.DataSource = query.ToList 
    dgvResults.CurrentCell = Nothing 
    dgvResults.Columns("name").HeaderText = "Name" 
    dgvResults.Columns("sys").HeaderText = "System" 
    dgvResults.Columns("price").HeaderText = "Price" 

ответ

0

Вы можете попробовать что-то вроде этого в консоли. Я подделал тест с фиктивными данными, так как я не знаю, что находится в вашем файле CSV:

Dim lstSystem As New List(Of String) 

    lstSystem.Add("System 1") 
    lstSystem.Add("System 4") 
    lstSystem.Add("System 5") 
    lstSystem.Add("System 7") 


    Dim Test As New List(Of String) From {"1,System 1,2", "4,System 5,6", "7,8,9"} 
    Dim query = From item In Test 
       Let data = item.Split(",") 
       Let name = data(0) 
       Let sys = data(1) 
       Let price = data(2) 
       Where lstSystem.Any(Function(x) x = sys) 
       Select New With {.Name = name, .System = sys, .Price = price} 
    For Each i In query 
     Console.WriteLine(i.System) 
    Next 
    Console.ReadLine() 
+1

Спасибо! Где lstSystem.Any (функция (x) sys.Contains (x)) сделал это! – user2384199

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