无法通过连接编译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
的右侧 。 通常情况下,编译器很高兴告诉您在错误消息中,请注意…