JP Edwards
JP Edwards

Reputation: 87

Linq - How to to create a list of categories which are included in another table

I am trying to select from a list of categories where it matches the category type of a list of items using linq. IE, from a list of all the FIGstationeryCategories, select only the ones where the FiGStationeryType has a matching category from an already filtered list. The models are listed below.

public class FIGstationeryType
{
    public int Id { get; set; }
    public virtual FIGstationeryCategory Category { get; set; }
    public virtual FIGcompany Company { get; set; }
    public decimal Height { get; set; }
    public decimal Width { get; set; }
    public virtual FIGstationeryType Template { get; set; }
    public bool DoubleSided { get; set; }
}

 public class FIGstationeryCategory
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal MaxZoom { get; set; }
    public ICollection<FIGstationeryType> StationeryItems { get; set; }
}

I have been going around in circles with this, and any help will be much appreciated. I haven't got very far! The first line of code works fine, it is the second one I am struggling with.

var listOfItems = db.StationeryTypes
            .Where(C => C.Company.Users.Any(u => u.UserId == WebSecurity.CurrentUserId))
            .ToList();

       var categoryList = db.StationeryCategories
           .Where(listOfItems

Any help would be much appreciated.

Upvotes: 1

Views: 1068

Answers (2)

JP Edwards
JP Edwards

Reputation: 87

var listOfCategories = 
(from o in listOfItems select o.Category.Name).Distinct().ToList();

When I thought about it (After watching 3 hours of linq videos last night), I realised that the listOfItems already held all the categories which where in use, so I didn't need to query and compare the two tables, just draw the relevant values from the list I already had.

Upvotes: 1

Mr. Mr.
Mr. Mr.

Reputation: 4285

I am not entirely sure how you want to select your categories but this probably goes a little way:

var categoryList = db.StationeryCategories
   .*Select*(x => listOfItems.Where(y => y.Category == x)
   .FirstOrDefault());

Can you clarify if this is the criteria you are after?

Upvotes: 0

Related Questions