К сожалению, ответ, кажется, нет .
Если кто-то может доказать обратное, я с радостью предоставлю им принятый ответ.
РЕДАКТИРОВАТЬ
Я нашел способ сделать это, используя Entity SQL . Я не уверен, что это наибольший способ, но так как он кажется только , то он может быть самым большим по умолчанию:)
var cmdText = "SELECT MIN(p.x), MAX(p.x), MIN(p.y), MAX(p.y) " +
"FROM Places AS p JOIN Logs AS l ON p.Id = l.PlaceId " +
"WHERE l.OwnerId==123";
var results = CreateQuery<DbDataRecord>(cmdText)
var row = results.First();
var minX = (double)row[0];
var maxX = (double)row[1];
var minY = (double)row[2];
var maxY = (double)row[3];
Выше не совсем тот код, с которым я работаю. Для более простого случая без объединения, вот сгенерированный SQL, показывающий, что выполняется только одна поездка в БД:
SELECT
1 AS [C1],
[GroupBy1].[A1] AS [C2],
[GroupBy1].[A2] AS [C3],
[GroupBy1].[A3] AS [C4],
[GroupBy1].[A4] AS [C5]
FROM ( SELECT
MIN([Extent1].[X1]) AS [A1],
MAX([Extent1].[X1]) AS [A2],
MAX([Extent1].[Y1]) AS [A3],
MIN([Extent1].[Y1]) AS [A4]
FROM [dbo].[Edges] AS [Extent1]
WHERE [Extent1].[PlaceId] = 123
) AS [GroupBy1]
Если кто-то найдет более элегантное решение этой проблемы, я дам ему принятый ответ.
РЕДАКТИРОВАТЬ 2
Спасибо Костасу, который нашел отличное решение этой проблемы , использующее чистый Linq.