【问题标题】:How to get TOP 1 result from a LINQ left join without APPLY如何在没有应用的情况下从 LINQ 左连接中获得 TOP 1 结果
【发布时间】:2016-05-18 01:49:01
【问题描述】:

我有一个主表,我打算在 LINQ 中使用左连接。

不幸的是,左连接乘以结果(我只需要一个前 1 个结果)。

问题来了:我的查询应该符合 SQL 8 标准。

所以当我使用以下查询时:

var query = from user in context.User                       
            join group in context.Groups on user.ID equals group.GroupID into groupJoin
            from subGroup in groupJoin.Take(1).DefaultIfEmpty()
            select new 
            {
              Name = user.Name,
              GroupName = subGroup!=null ? subGroup.Name : null
            };

我得到了这个例外:

此查询的执行需要 APPLY 运算符,这不是 在 SQL Server 2005 之前的 SQL Server 版本中受支持。

如何替换我的查询以符合 SQL8?

【问题讨论】:

  • LINQ 太宽泛了。请提供适当的标签和信息 - 例如。实体框架、版本等

标签: linq entity-framework-4


【解决方案1】:

不幸的是,我没有要测试的 EF4(它在最新的 EF6 中可以解决问题),但您可以尝试像这样强制使用 SQL 子查询表达式:

var query = from user in context.User
            select new
            {
                Name = user.Name,
                GroupName = (from g in context.Groups where g.GroupId == user.Id select g.Name).FirstOrDefault()
            };

【讨论】:

    【解决方案2】:

    使用没有 take(1) 的 linq-query,然后使用下一个代码:

    query = query.Take(1);
    

    【讨论】:

    • 我猜它会限制最终查询并且只需要 1 个用户..但我需要限制连接表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2019-10-06
    • 2012-04-19
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-07
    相关资源
    最近更新 更多