Poniżej znajduje się przykład kodu C#, którego nie mogę skompilować podczas wykonywania linq join. Czy ktoś wie, dlaczego to się nie kompiluje?Nie można pobrać kwerendy C# linq do kompilacji z łączeniami
Błąd jest
typu argumenty nie można wywieść z kwerendy
(W moim prawdziwym kodzie Fetch()
zwraca IQueryable<T>
)
using System.Collections.Generic;
using System.Linq;
namespace LinqJoin
{
public class DataRepository<T>
{
public IList<T> Fetch()
{
return new List<T>();
}
}
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<SSOUser>().Fetch();
var userroles = new DataRepository<UserRole>().Fetch();
var roles = new DataRepository<Role>().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);
}
}
}
Dziękuję bardzo za szybką odpowiedź. nie uwierzysz, ile czasu zmarnowałem na to. Byłoby miło, gdyby kompilator był nieco bardziej pomocny, ale twoja wskazówka na temat "wprowadzonej zmiennej odległości zawsze musi znajdować się po prawej stronie równych", to jest to, co teraz zobowiążę się do pamięci. –