如何从没有APPLY的LINQ左连接获得TOP 1结果

时间:2016-05-17 12:27:57

标签: linq entity-framework-4

我有一个主表,我打算使用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符合性?

2 个答案:

答案 0 :(得分:0)

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

/usr/bin/php5.6 /tmp/ide-behat.php --format PhpStormBehatFormatter /home/grzegorz/PhpstormProjects/Test/features/scenariusze.feature
Testing started at 14:48 ...

Malformed field path ""

答案 1 :(得分:0)

不幸的是我没有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()
            };