2013-05-15 86 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