不幸的是,答案似乎是否。
如果有人能证明相反,我很乐意授予他们被接受的答案。
编辑
我找到了一种使用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
感谢Costas发现了一种使用纯Linq的绝佳解决方案来解决这个问题。
let
语法吗? - Tomas Janssonlet
确实可以与集合一起使用。 你试过了吗? 我有生产代码可证明两者都可以。 - Craig Stuntzlet
与集合的例子? - Drew Noakes