C# 什么';这样的Linq查询有什么不对
我有两张桌子:C# 什么';这样的Linq查询有什么不对,c#,linq,C#,Linq,我有两张桌子: Team: teamId, teamName Player: playerId, teamId, playerName 我想通过playerName获得球队名称。我写了两个查询,其中一个不起作用 var query = from t in dc.Teams where t.teamId == ((from p in dc.Players where p.playerName == "ko
Team: teamId, teamName
Player: playerId, teamId, playerName
我想通过playerName获得球队名称。我写了两个查询,其中一个不起作用
var query = from t in dc.Teams
where t.teamId == ((from p in dc.Players
where p.playerName == "kobe"
select p.teamId).SingleOrDefault())
select t.teamName; //Doesn't work
var query = from t in dc.Teams
join p in dc.Players
on t.teamId equals p.teamId
where p.playerName == "kobe"
select t.teamName; //Works
任何人都可以告诉我为什么第一个查询无法工作?如果有一个或零个名为“kobe”的玩家,两个查询应该产生相同的结果。如果有多个名为“kobe”的玩家,第一个查询将不会返回任何内容,因为其子查询使用
SingleOrDefault
,如果集合不包含一个值,则返回默认值,而第二个查询将返回名为“kobe”的每个玩家的球队名称.马丁已经提到了原因,但除此之外,
您可以使用FirstOrDefault
而不是SingleOrDefault
。通过使用FirstOrDefault
,您的查询可以返回任意数量的结果,但您声明只需要第一个结果
var query = from t in dc.Teams
where t.teamId == ((from p in dc.Players
where p.playerName == "kobe"
select p.teamId).FirstOrDefault())
select t.teamName; //Now it works
您现在应该已经知道如何缩进代码…错误消息?似乎您正在尝试在调用SingleOrDefault()后进行投影(选择)。这是没有道理的。你有没有收到一个错误,或者它只是没有返回你所期望的?