LINQ Help, тип данных возвращаемого набора - PullRequest
0 голосов
/ 11 июля 2011

Я запутался, какой тип данных определить для моей переменной, в которой хранится значение, возвращаемое оператором LINQ.

В настоящее время я определяю его как некоторый тип данных, но генерируется ошибка, например: ""Unable to cast object of type 'WhereSelectListIterator 2 "" `

Пример кода:

Private BaseRateList = List (of BaseCat)
Private myBase As BaseCat = Nothing

'''In some other proc
myBase = From BaseRate In BaseRateList _
         Where BaseRate.UIN = 4 _
         Select BaseRate

Здесь я хочу, чтобы myBase содержал данные с UIN = 4

Ответы [ 3 ]

1 голос
/ 11 июля 2011

Звучит так, будто вам нужно только одно значение.Возможные варианты:

например

myBase = (From BaseRate In BaseRateList _
          Where BaseRate.UIN = 4 _
          Select BaseRate).Single()

... в зависимости от того, как вы этого хотитевести себя, если есть 0 или несколько совпадающих значений.

или с использованием перегрузки Single (и т. д.), которая принимает предикат:

myBase = BaseRateList.Single(Function(baseRate) baseRate.UIN = 4)
0 голосов
/ 11 июля 2011

Ваш запрос LINQ представляет выражение, которое еще не выполнено. Прямо сейчас ваш код пытается поместить этот запрос в переменную, которая должна быть объявлена ​​как IQueryable (Of BaseCat). Если вы хотите выполнить запрос, чтобы получить результат, вы должны использовать Aggregate вместо From, чтобы выбрать что-то из результатов запроса, или вы должны использовать ToList или ToArray, чтобы преобразовать результаты в коллекцию или вы должны использовать функцию First, FirstOrDefault, Single или SingleOrDefault, чтобы выбрать один результат выполнения запроса.

Важно отметить разницу между самим запросом и результатами его выполнения. Если вы поместите запрос в переменную (IQueryable), вы сможете расширить этот запрос, выполнив другой запрос по этому запросу (например, Dim newQuery = From itm In myBase Where itm.MyDate <= Today), и запрос все равно не будет выполнен, пока вы фактически не заставите его перечислить или выбрать результат. из него одним из вышеперечисленных способов или чем-то похожим.

0 голосов
/ 11 июля 2011

Где условие по умолчанию возвращает IEnumberable (Baserates в вашем случае). Возьмите первый элемент возвращенного списка или попробуйте использовать

var baseRate = BaseRateList.Single(baseRate => baseRate.UIN == 4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...