В моей базе данных SQL 2008 есть три таблицы: User, CutomerUser и SalesUser. Они представляют разные типы пользователей. В моей концептуальной модели они смоделированы так, что сущности CustomerUser и SalesUser наследуются от User. На уровне базы данных CustomerUser и SalesUser имеют свои первичные ключи, которые в то же время являются внешним ключом для пользователя. Таким образом, отношение один к нулю или один.
Таблица CustomerUser имеет столбец CustomerNumber, а таблица SalesUser имеет столбец ПредставительКод. Я хочу написать запрос, который возвращает данные о пользователях, клиентах или продавцах на основе критериев выбора. Обратите внимание, что есть пользователи, которые не являются ни CustomerUsers, ни SalesUsers.
Я не хочу возвращать всех пользователей, чей логин равен указанной строке, независимо от типа. Кроме того, если у CustomerUser есть номер клиента, равный указанной строке, я хочу его вернуть, и аналогичным образом я хочу вернуть SalesUsers, у которых репрезентативный код равен указанной строке.
Я пишу следующий запрос:
var users = from u in Context.Users
where (((u is CustomerUser) && ((CustomerUser)u).CustomerNumber.Equals(criteria))
|| ((u is SalesUser) && ((SalesUser)u).RepresentativeCode.Equals(criteria)))
|| u.Login.Equals(criteria)
select u;
Запрос компилируется, но во время выполнения, когда запрос выполняется, выдается следующее исключение:
"Невозможно привести тип« MyDb.Models.User »к типу« MyDb.Models.CustomerUser ». LINQ to Entities поддерживает только приведение типов примитивов модели данных сущностей."
Как мне написать свой запрос, чтобы он работал?
ПРИМЕЧАНИЕ. Я собираюсь применить сортировку / разбиение по страницам к запросу по конвейеру, поэтому выполнение ToList (), а затем приведение типа решения мне здесь не подойдет.