无法通过连接编译c#linq查询

下面是一些c#代码的示例,我在执行一些linq连接时无法编译。 有谁知道为什么这不编译?

错误是

无法从查询中推断出类型参数

(在我的实际代码中, Fetch()返回一个IQueryable

 using System.Collections.Generic; using System.Linq; namespace LinqJoin { public class DataRepository { public IList Fetch() { return new List(); } } internal class SSOUser { public int Id { get; set; } } internal class UserRole { public int SSOUserId { get; set; } public int RoleId { get; set; } } internal class Role { public int RoleId { get; set; } } class Program { static void Main(string[] args) { var users = new DataRepository().Fetch(); var userroles = new DataRepository().Fetch(); var roles = new DataRepository().Fetch(); var result = from u in users join ur in userroles on u.Id equals ur.SSOUserId join r in roles on r.RoleId equals ur.RoleId select u; //var x1 = users.Join(userroles, u => u.Id, ur => ur.SSOUserId, (u, ur) => new { User = u, UserRole = ur}).Join(roles, x => x.UserRole.RoleId, r => r.RoleId, res => res.User); } } } 

这种联接是错误的方式:

 join r in roles on r.RoleId equals ur.RoleId 

它应该是:

 join r in roles on ur.RoleId equals r.RoleId 

您引入的范围变量始终必须位于equals右侧 。 通常情况下,编译器很高兴告诉您在错误消息中,请注意…