Проблемы с преобразованием при объединении и опции Strict on

#vb.net #linq-to-sql #union

#vb.net #linq-to-sql #объединение

Вопрос:

у меня проблема с объединением для LINQ to SQL

У меня есть мой запрос LINQ

 Dim dc As New ContainerDB.DataClassesDataContext()
    Dim test = (From container In dc.GetTable(Of tbl_container)() Where container.pkContainerID = iPkContainerID).Union( _
                    From containerHist In dc.GetTable(Of tbl_containerHIST)() Where containerHist.pkContainerID = iPkContainerID)
  

Я всегда получаю неявную ошибку преобразования

System.Linq.IQueryable (из ContainerDB.tbl_containerHIST) в системе.Коллекции.Общий.IEnumerable (из ContainerDB.tbl_container).

Что не так в этом запросе? Чего я не понимаю?

Заранее спасибо

Ответ №1:

Попробуйте поставить Option Infer On . Это позволит использовать вывод типа, который вы, похоже, здесь делаете:

 Dim test =
  

Редактировать

Кроме того, вам необходимо использовать анонимные типы:, чтобы можно было сравнивать tbl_container и tbl_containerHIST:

 Dim test = (From container In dc.GetTable(Of tbl_container)() 
            Where container.pkContainerID = iPkContainerID 
            Select New With{ ... }).Union( _
            From containerHist In dc.GetTable(Of tbl_containerHIST)() 
            Where containerHist.pkContainerID = iPkContainerID 
            Select New With{ ... })
  

Комментарии:

1. Привет, Rewinder, спасибо за ваш вклад. но это не работает. «System.Data.Linq. Запрос данных 1[ContainerDB.tbl_containerHIST]" cannot be convertered to Typ "System.Collections.Generic.IEnumerable 1[ContainerDB.tbl_container]».

2. @SwissGuy: Похоже, проблема в том, что tbl_containerHIST и tbl_container — это два разных типа. Возврат объединения должен быть IEnumerable (Из ContainerDB.tbl_container). Возможно ли преобразовать tbl_containerHIST в tbl_container?

3. Привет, перемотчик, в cointainerHIST есть еще только 1 столбец для удаленных, обновленных. есть ли способ получить к этому доступ? та же ошибка для: Dim test = (From container In dc.GetTable(Of tbl_container)() Where container.pkContainerID = iPkContainerID Select New With {.ContainerID = container.pkContainerID}).Union( _ From containerHist In dc.GetTable(Of tbl_containerHIST)() Where containerHist.pkContainerID = iPkContainerID Select New With {.ContainerID = containerHist.pkContainerID})

4. @SwissGuy: Ну, к нему можно получить доступ, но для успешного объединения все типы должны иметь одинаковые свойства / столбцы.