Linq: проблема динамического выбора - PullRequest
0 голосов
/ 13 мая 2009

Я хочу выполнить запрос, чтобы получить строковый массив различных элементов logName для logType. Прекрасно работает следующее:

Dim stringArray() As String = (From item In dc.Vw_Logs 
    Where item.LogType = [Passed in logType] 
    Select item.LogName Distinct).ToArray()

Однако, это работает, только когда установлен определенный тип LogType. Я хотел бы, чтобы предложение logType было необязательным. Чтобы добиться этого, я переписал запрос:

Dim q = From item In dc.Vw_Logs Distinct
If not logType is nothing Then 
    q = q.Where(Function(item) item.LogType = logType)
End If
q.Select(Function(item) item.LogName)
Dim stringArray() As String = q.ToArray()

При этом я получаю следующую ошибку:

Value of type '1-dimensional array of Vw_Log' cannot be converted 
to '1-dimensional array of String'

Какой лучший способ обойти это? Я хотел бы избежать повторения каждого предмета и приведения.

Спасибо за любую помощь

Ответы [ 3 ]

1 голос
/ 13 мая 2009

Ошибка в том, что q - это не строки, а тип, содержащийся в dc.Vw_Logs.

Я больше не занимаюсь программированием на VB, но это должно вас сблизить.

Dim q = From item In dc 
        Where (logType Is Nothing Or item.LogType = logType) 
        Select item.LogName Distinct


logType Is Nothing Or item.LogType = logType

Если logType имеет значение, вы получите элементы, которые соответствуют; в противном случае вы получите все предметы.

1 голос
/ 13 мая 2009

Проблема в том, что эта строка

q.Select(Function(item) item.LogName)

не меняет q, оно просто отбрасывает результат выбора, так что когда вы делаете

Dim stringArray() As String = q.ToArray()

Вы пытаетесь преобразовать исходный q (тип Vw_Log) в массив строк. Замените последние две строки на это:

Dim stringArray() As String = q.Select(Function(item) item.LogName).ToArray()
0 голосов
/ 13 мая 2009

Не используйте повторно q. Первое назначение - Vw_Log (), второе - String ().

Вы также можете объединить две последние строки, чтобы избежать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...