2009-08-25 5 views
3

Как использовать цикл в vb.net что-то вродеДля каждого контура в 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 клиентов .. Пожалуйста, помогите

+0

Вы хотите, чтобы цикл повторялся в списке клиентов в кусках 500? –

+2

Не могли бы вы пояснить, что вы подразумеваете под «каждый 500 клиентов»? –

+2

не создавайте «новый» список клиентов, если вы просто замените его на следующей строке. –

ответ

3

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

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

Тогда для петли вам нужна равнина «за» петлю, а не для каждого. Не забудьте остановить до конца списка:

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

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

For Each current In customers 
    '' // Do something here 
    Console.WriteLine(current.Name) 
Next 
1

«Это начнется в 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

Когда я пробую это для начала как integer = 500 для Customer.Count Я получаю сообщение о том, что клиент не может быть преобразован в int – 2009-08-25 15:25:29

+0

. Вы должны указать своего клиента для индекса клиентов (начать) ... – klabranche

1

Что-то вроде этого: -

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().

+0

Я хочу сделать это для каждых 500 клиентов. – 2009-08-25 15:24:38

+0

Вы хотите, чтобы вы сделали это для каждого 500-го клиента, возможно? Пока неясно, чего вы пытаетесь достичь. – JohnFx

0

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

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 
0
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 

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

0

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

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

Очевидно, что недостатка в разнообразии нет. Я не признаю ваш тип объекта DataAcess, но если вы можете вытащить эту таблицу в виде набора записей (т. Е. Таблицы 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 
Смежные вопросы