所以我是LINQ的新手,刚从csv文件中做了一个测试查询,在一个数据网格中显示了它的结果。我使用简单的Where语句,如Where sys =“System 1”,没有问题。当涉及多个测试时,我不知道我将检查多少系统,我被卡住了。
我应该如何设置检查列表的位置?
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 :(得分: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()