Search code examples
c#linqlinq-to-entities

c# Mapping lists to ILookup<int,tenant>


Based on the following classes.

    public class User
    {
        public int Id { get; set; }
        public List<TenantUser> TenantUsers { get; set; }
    }


    public class TenantUsers
    {
        public int UserId { get; set; }
        public User User { get; set; }
        public int TenantId { get; set; }
        public Tenant Tenant { get; set; }
    }

    public class Tenant
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public List<TenantUser> TenantUsers { get; set; }
    }

I am trying to generate a linq query that will return an Lookup<int,Tenant>() The int being the userId from TenantUsers.

My attempt so far:

var userIds = new int[] {1, 2,3,5};
var tenantUsers = new List<TenantsUsers>();

var tenants = 
tenantUsers
.Where(m => userIds.Contains(m.UserId))
.ToLookup(x=>x.UserId); 

Above is how far I got. This returns ILookup<int,TenantUsers> I am looking for ILookup<int,Tenant>();


Solution

  • You have to select Tenant from the result like this.

    var userIds = new int[] {1, 2,3,5};
    var tenantUsers = new List<TenantsUsers>();
    
    var tenants = 
    tenantUsers
    .Where(m => userIds.Contains(m.UserId))
    .ToLookup(x => x.UserId, y => y.Tenant); 
    

    C# Fiddle