Это требует предварительной агрегации и агрегирования строк.
with t as (
select id, question, count(*) as cnt
from t
group by id
)
select i.id,
stuff( (select ', ' + convert(varchar(255), cnt) + ' ' + question
from t t2
where t2.id = i.id
for xml path ('')
), 1, 2, ''
) as result
from (select distinct id from t) i;
Таблицы являются эффективно концептуальным вопросом - они действительно существуют на сервере, таким образом, необходимо запросить для получения записей. Записи внешнего ключа - те на самом деле выбранные другим запросом, таким образом, в той точке они локально доступны. Это - довольно неясное описание, но надо надеяться оно преобладает над общим понятием.
Это было обращено на форумах MSDN. Суть обоснования - то, что очень трудно отследить добавленные и удаленные объекты при создании запросов против базы данных. Вместо этого EntitySet является чем-то вроде локальной копии связанных объектов, которыми можно управлять. К сожалению, как Вы заметили, это имеет побочный эффект передачи выражений в LINQ к вызовам Объектов вместо лучшего выполнения LINQ к SQL.
ctx.Matches.Where(x => x.MatchID == 1).Single()
Единственный () возвращает Соответствие, не IQueryable (Соответствие).
Просто продвиньте Единственный () прочь к последнему шагу:
ctx.Matches
.Where(m => m.MatchID == 1)
.Select(m => m.MatchPlayers.Max(mp => mp.Score))
.Single();
То, что показывает этот запрос, что нормально использовать свойство MatchPlayers в запросе. Который обращается к моей интерпретации вопроса автора вопроса - "Почему я не могу использовать EntitySet в запросе?", Вы можете.