Тройной Оператор Проблемы с LINQ - PullRequest
1 голос
/ 18 ноября 2011

У меня проблемы с этой троичной линией:

var userFromContext = IsOwner ? db.Owners.Where(o => o.UserName == username) 
                              : db.Users.Where(u => u.UserName == username);

Это дает мне это сообщение об ошибке:

Тип условного выражения не может быть определен, поскольку не существует неявного преобразования между System.LINQ.IQueryable<Owners> и System.LINQ.IQueryable<Users>.

Зачем это нужно, если я назначаю его переменной var?

Ответы [ 3 ]

11 голосов
/ 18 ноября 2011

Потому что переменная должна быть некоторого типа.

"var" не означает " нетипизированный ".Это означает « Уважаемый компилятор, пожалуйста, выясните, какой тип этой переменной должен быть основан на выражении, которое я ему присваиваю ».

Для этого компиляторсначала нужно понять, что это за тип выражения, и он не может этого сделать, потому что две ветви вашего троичного оператора имеют разные типы.

3 голосов
/ 18 ноября 2011

Потому что var это просто заполнитель для статического типа.Тип имеет , который должен быть известен во время компиляции.Если тип зависит от данных, то компилятор не может знать, какой это тип.Вместо var используйте ключевое слово dynamic, если вы действительно хотите использовать приведенную выше конструкцию:

dynamic userFromContext = IsOwner ? db.Owners.Where(o => o.UserName == username) 
                                  : db.Users.Where(u => u.UserName == username);
3 голосов
/ 18 ноября 2011

Тернарный оператор должен иметь определенный, общий тип возврата. Вы можете исправить это, приведя их обоих к IEnumberable.

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