"Только одно выражение может быть указано в списке выбора, когда подзапрос не вводится с EXISTS".

У меня довольно сложный запрос Linq:

var q = from eiods in LinqUtils.GetTable<EIOfficialDesignee>()
        let eiodent = eiods.Entity
        join tel in LinqUtils.GetTable<EntityTelephone>()
        on new { EntityID = eiodent.ID, TelephoneType = EntityTelephone.TTelephone.Office } equals new { tel.EntityID, tel.TelephoneType }
        into Tel
        let Tel1 = Tel.FirstOrDefault()
        join fax in LinqUtils.GetTable<EntityTelephone>()
        on new { EntityID = eiodent.ID, TelephoneType = EntityTelephone.TTelephone.Fax } equals new { fax.EntityID, fax.TelephoneType }
        into Fax
        let Fax1 = Fax.FirstOrDefault()
        join cell in LinqUtils.GetTable<EntityTelephone>().DefaultIfEmpty()
        on new { EntityID = eiodent.ID, TelephoneType = EntityTelephone.TTelephone.Mobile } equals new { cell.EntityID, cell.TelephoneType }
        into Mobile
        let Mobile1 = Mobile.FirstOrDefault()
        where eiods.ID == CurrentEIPatient.EIOfficialDesigneeID
        select new {
          ID = eiods.ID,
          EIODName = eiodent.FormattedName,
          Phone = Tel1 != null ? Tel1.FormattedNumber : "",
          Fax = Fax1 != null ? Fax1.FormattedNumber : "",
          Cellphone = Mobile1 != null ? Mobile1.FormattedNumber : "",
        };

Этот запрос возвращает мне ошибку SQL:

Only one expression can be specified in the select list when the subquery is not introduced with EXISTS
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS

Да, в трех экземплярах. Это очевидный индикатор того, что проблема с запросом повторяется 3 раза, т.е. В 3 разных типах телефонных номеров.

Согласно документации сервера SQL, это происходит из искаженного запроса. Но это Линк, ради бога! Как это может исказить запрос?

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

Спасибо!

Ответ 1

Решил это сам, и здесь это для кого-то другого.

Дьявол находится в предложении select в конце, в частности:

Phone = Tel1 != null ? Tel1.FormattedNumber : "",
Fax = Fax1 != null ? Fax1.FormattedNumber : "",
Cellphone = Mobile1 != null ? Mobile1.FormattedNumber : "",

Это свойство FormattedNumber является вычисленным полем, основанным на свойствах Number и Extension объекта EntityTelephone. Когда я заменяю FormattedNumber на Number, все работает нормально.

Лучшее решение этой проблемы найдено здесь.