Di seguito è riportato un esempio ridotto di un codice C# che non riesco a compilare durante l'esecuzione di alcuni join di linq. Qualcuno sa perché questo non viene compilato?Impossibile ottenere la query C# linq da compilare con join
L'errore è
tipo argomenti non possono essere dedotte dalla query
(Nel mio codice reale Fetch()
restituisce un 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);
}
}
}
Grazie mille per la risposta rapida. non crederai a quanto tempo ho sprecato per quello. Sarebbe bello se il compilatore fosse un po 'più utile, ma il tuo suggerimento su "La variabile di intervallo che introduci deve sempre essere sul lato destro degli uguali" è uno che ora assegnerò alla memoria. –