如何在不应用的情况下从LINQ左联接中获得前1个结果
我有一个主表,我打算使用LINQ的左连接 不幸的是,左连接将结果相乘(我只需要从中得到前1个结果) 问题来了:我的查询应该与SQL 8一致 因此,当我使用以下查询时:如何在不应用的情况下从LINQ左联接中获得前1个结果,linq,entity-framework-4,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
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要求?使用了没有take(1)的linq查询,然后使用下一个代码:
query = query.Take(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()
};
林克太宽了。请提供适当的标签和信息-例如实体框架、版本等。我想这会限制最终查询,只需要1个用户。但我需要限制联接表。