0

私はLINQを初めて使用し、結果をデータグリッドに表示するcsvファイルからテストクエリを作成しました。Where sys = "System 1" のような単純な Where ステートメントを問題なく使用していました。いくつのシステムに対してチェックするか分からない複数の場所のテストになると、行き詰まりました。

リストと照合する場所をどのように設定すればよいですか?

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"
4

1 に答える 1

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()
于 2013-05-15T17:05:22.620 に答える