2013-05-15 4 views
0

인 linq 쿼리를 필터링하므로 LINQ를 처음 사용하고 있으며 데이터 격자에 결과를 표시하는 CSV 파일에서 테스트 쿼리를 만들었습니다. 나는 간단한 Where 문을 어디서 sys = "System 1"과 같이 문제없이 사용했다. 그것이 얼마나 많은 시스템을 점검 할 것인가를 알지 못했던 여러 곳의 테스트가 나왔을 때 나는 막혔다.VB : 목록이

목록을 확인하는 위치는 어떻게 설정해야합니까?

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