2013-05-15 168 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(Function(x)sys.Contains(x))做到了! – user2384199