Для каждого цикла в vb.net - PullRequest
7 голосов
/ 25 августа 2009

Как мне использовать для цикла в vb.net что-то вроде

dim start as integer
Dim customers as New List(Of Customers)

Customers=dataAcess.GetCustomers()

For each start=500 in  Customers.count
  'Do something here'
Next

Я хочу обработать некоторые данные для каждых 500 клиентов .. Пожалуйста, помогите

Ответы [ 8 ]

7 голосов
/ 25 августа 2009

Прежде всего, не создавайте список New клиентов, если вы просто собираетесь назначить другой список для ссылки в следующей строке. Это немного глупо. Сделайте это так:

Dim customers As List(Of Customer) = dataAccess.GetCustomers()

Тогда для цикла вам нужен простой цикл "For", а не a для каждого. Не забудьте остановиться до конца списка:

For i As Integer = 500 To Customers.Count -1 
    'do something with Customers(i) here
Next i

Если вы используете Visual Studio 2008, вы также можете написать это так:

For each item As Customer in  Customers.Skip(500)
   'Do something with "item" here
Next
7 голосов
/ 25 августа 2009

Попробуйте следующее

For Each current In customers
  '' // Do something here 
  Console.WriteLine(current.Name)
Next
1 голос
/ 25 августа 2009

Примерно так: -

Dim customers as New List(Of Customer)

Customers=dataAcess.GetCustomers()

For Each customer AS Customer in  Customers
   '' // do something with the customer object
Next

Редактировать

Похоже, вы хотите выбрать 500 из N элементов или, возможно, следующие 500. Вы можете использовать методы расширения LINQ .Take и / или .Skip для достижения этой цели. Используйте ToList, чтобы создать свой список. E.g.:-

Dim customers as List(Of Customer)
customers = dataAccess.GetCustomers().Skip(500).Take(500).ToList()

Если все, что вы хотите сделать через клиентов, то вы можете обойтись без ToList ().

1 голос
/ 25 августа 2009

'Это начнется с 500 и будет продолжаться до конца ....

for start as integer = 500 to Customers.Count

'process customer....
customer = Customers(start)

Next

Для просмотра всего списка:

for each cust as Customer in Customers

Next 

Одно примечание .... VB нечувствителен к регистру, и ваш пример кода, кажется, использует строчные и прописные буквы

0 голосов
/ 25 августа 2009

Очевидно, что нет недостатка в разнообразии. Я не распознаю ваш тип объекта «DataAcess», но если вы можете использовать эту таблицу как Recordset (то есть таблицу SQL), попробуйте это. (Не забудьте вернуть набор записей, когда вы закончите)

Option Explicit

Dim Customers As Recordset
Set Customers=currentdb.openrecordset("???")

While Customers.EOF=False
   'do stuff here using the recordset object
   'i.e. Customers.Fields("Name")="Billy"
   Customers.MoveNext
Wend
0 голосов
/ 25 августа 2009

Я не совсем уверен, что вы пытаетесь сделать, но, возможно, вы могли бы попробовать это:

Dim count As Integer = 0
Const MAX_CUSTOMERS As Integer = 500
Dim customers As List(Of Customers) = dataAcess.GetCustomers()

For Each c As Customer In customers
    'do stuff here'
    c.Name = "Billy"
    count+=1

    If count = MAX_CUSTOMERS Then Exit For
Next

Это ни в коем случае не элегантно, но имеет смысл и будет работать.

0 голосов
/ 25 августа 2009
Dim start as Integer
Dim customers as New List(Of Customers)

Customers = dataAcess.GetCustomers()

For i as Integer = start to Customers.count Step 500
    Debug.Print Customers(i).someProperty
    Do something here
Next i

Я думаю, вам нужно использовать индекс клиента и шаг в 500. Это будет обрабатывать только клиента (начало), клиента (начало + 500), клиента (начало + 1000) и т. Д., А не всех клиентов. Это то, что вы намерены?

0 голосов
/ 25 августа 2009

Вы можете попробовать:

    For i As Integer = 500 To (customers.Count -1)
        ''do something
    Next

Или

    For i As Integer = 0 To (customers.Count - 1) step 500
        ''do something
    Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...