2012-03-09 2 views
4

Я немного новичок в linq, я использую linq для фильтрации данных. Теперь я хочу, чтобы написать запрос для ниже:Обновление списка с linq вместо каждого

For Each k As String In con.Numbers.Keys 
     con.Numbers(k).Primary = False 
Next 

Con.Numbers является словарь, но теперь я преобразовал его в список, поэтому приведенный выше код не будет работать со списком, не могли бы вы сказать мне, как Я могу добиться этого с помощью Linq, это список Con.NUmbers. Спасибо.

Дополнительная информация: Структура Класс:

Public Class ContactCon 
     Property ConId As String 
     Property ConRowID As String 
     Property Title As String 
     Property Mob1 As String 
     Property Mob2 As String 
     Property Land1 As String 
     Property Land2 As String 
     Property Email1 As String 
     Property Email2 As String 
     Property Fax1 As String 
     Property Fax2 As String 
     Property Primary As Boolean 
     Public Sub New() 
      ConId = "" 
      ConRowID = "" 
      Title = "Contact1" 
      Mob1 = "" 
      Mob2 = "" 
      Land1 = "" 
      Land2 = "" 
      Email1 = "" 
      Email2 = "" 
      Fax1 = "" 
      Fax2 = "" 
      Primary = False 
     End Sub 
End Class 
+0

ли вы принимать все значения словаря и поместить его в список? – Henry

+0

Да, все слова ok. – surpavan

ответ

12

Не знаю, если я неправильно вас где-то.

Не знаете, почему вы хотите использовать LINQ специально. Это совершенно ясно:

For Each number as ContactCon In con.Numbers 
    number.Primary = False 
Next 

Если по какой-то причине вы хотите LINQ-подобный синтаксис, вы могли бы использовать List(T).ForEach:

con.Numbers.ForEach(Sub(n) n.Primary = False) 

Для конечно, это не «реальный» LINQ, но опять же, Я не уверен, почему это имеет значение. (?)

Если вы действительно вынуждены использовать LINQ, вы можете сделать:

con.Numbers.Select(Sub(n) n.Primary = False).ToList() 

Но, конечно же, код нонсенс. Не делайте этого - придерживайтесь того, что ясно и очевидно, что в данном случае означает просто цикл по списку.

EDIT

Fixed страшное злоупотребление Function

+2

+1 Я согласен с вами в пользу первого варианта (мелкие детали: я думаю, что это должно быть 'con.Numbers.Values') и отклонять третью ерунду. –

+0

@ GertArnold он упоминал об изменении словаря на список – Henry

+0

Хорошо со мной. Это незначительно. Главное - не использовать linq как молоток, ищущий гвоздь. –

1

LINQ означает Language Integrated Query. Запрос означает получение данных, поэтому это не так хорошо для обновления данных. Возможно, вы сможете использовать его для получения другой копии обновляемых данных, но не для непосредственного обновления оригинала.

Если вы хотите создать новый список с данными обновленными, вы могли бы сделать что-то вроде этого:

Dim NewList = con.Numbers.Select(Function(e) New MyObject() With {.Key = e.Key, .Primary = False}).ToArray() 
+0

ok, можно установить другой способ, например, скопировать обновленные значения из linq в новую переменную? – surpavan

+0

Не зная больше о вашей структуре данных, трудно привести пример, но я сделал все, что мог. – BlueMonkMN

Смежные вопросы