"Только одно выражение может быть указано в списке выбора, когда подзапрос не вводится с 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
, все работает нормально.
Лучшее решение этой проблемы найдено здесь.