Для каждой итерации через Linq - PullRequest
0 голосов
/ 10 марта 2012

Я новичок в linq и пытаюсь выучить его в режиме реального времени.Ниже приведен код из vb.net из одного из моих приложений:

    For Each k As BSPLib.ContactLib.Contact In data_org
        data.Add(k.prime)
    Next

Где data и data_org - это наблюдаемые коллекции типа Contact.Prime и Contact class соответственно.Можно ли сделать вышеупомянутое с помощью запроса linq, как показано ниже

data = From k As BSPLib.ContactLib.Contact In data_org Select k.prime

Но приведенное выше дает следующую ошибку во время выполнения:

Unable to cast object of type WhereSelectEnumerableIterator`2[BSPLib.ContactLib.Contact,BSPLib.ContactLib.ContactPrime]' to type 'System.Collections.ObjectModel.ObservableCollection`1[BSPLib.ContactLib.ContactPrime]'.

Не могли бы вы мне помочь.Спасибо.

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Ваша переменная data объявлена ​​как ObservableCollection.Нет неявных преобразований из перечислимых в это.Вам нужно будет создать экземпляр ObservableCollection с этим содержимым.К счастью, вы можете просто передать его в конструктор.

Dim query = From k As BSPLib.ContactLib.Contact In data_org Select k.prime
data = New ObservableCollection(Of ContactPrime)(query)
0 голосов
/ 10 марта 2012

Это потому, что вы выбираете k.prime из вашего запроса linq.

Результатом вашего запроса будет тип k.prime.

Следовательно, когда вы пытаетесь разыграть в foreach

foreach k как BSPLib.ContactLib.Contact в data_org недопустим, так как k имеет типof (k.prime)

В вашем коде выше вы должны использовать

data = From k As BSPLib.ContactLib.Contact In data_org Выберите k

...