Smac
Smac

Reputation: 401

How to Link two IDs from different classes in MVC5 to display certain information

I am trying to link up the RestaurantId in the RestaurantReservationEventsTbl with the RestaurantID in the RestaurantTbl to display reservations that are only made for the currently logged in restaurant.

I am receiving the following error in my code operator == cannot be applied to operands of type int and iqueryable int

Here is what I am doing in my home controller

var RestaurantIDRestaurantTbl = from r in db.Restaurants select r.RestaurantID;
//var listOfRestaurantsReservations = db.RestaurantReservationEvents.ToList();
var listOfRestaurantsReservations = db.RestaurantReservationEvents.Where(x => x.RestaurantID == RestaurantIDRestaurantTbl).ToList();
//return View(restaurants.Where(x => x.RestaurantEmailAddress == UserEmail).ToList());
//create partial view called _RestaurantReservation
return PartialView("_RestaurantReservations", listOfRestaurantsReservations); 

Upvotes: 1

Views: 38

Answers (2)

Rey
Rey

Reputation: 4002

You have to change your code to materialize the restaurantIds like this:

var RestaurantIDRestaurantTbl = (from r in db.Restaurants
                                 select r.RestaurantID).ToList();

Then you may change the code as below for the comparison to work:

 var listOfRestaurantsReservations = db.RestaurantReservationEvents.Where(x => RestaurantIDRestaurantTbl.Contains(x.RestaurantID)).ToList();

Anyway this is not the best solution. I will write another example for you, just try this example if it is working or not and let me know for the result.

I would considering changing the code as below to be much more efficient:

var listOfRestaurantsReservations = (from r in db.Restaurants
                                    join e in  db.RestaurantReservationEvents 
                                    on r.RestaurantID equals e.RestaurantID
                                    //where r.RestaurantID == something //if where condition needed
                                    select e).ToList();

If your tables are not connected with foreignkeys please consider to read this documentation here to make a better structure of the tables since they are related to each-other.

If your tables are related as in documentation article you might have something like that:

var RestaurantIDRestaurantTbl = db.Restaurants.SingleOrDefault(x => x.RestaurantID == something);
if(RestaurantIDRestaurantTbl != null)
{
   var listOfRestaurantsReservations = RestaurantIDRestaurantTbl.RestaurantReservationEvents.ToList();
}

Upvotes: 1

Cristian Szpisjak
Cristian Szpisjak

Reputation: 2469

{
    // This will give you a list of IDs
    var RestaurantIDRestaurantTbl = db.Restaurants
        .Select(p => p.RestaurantID)
        .ToList();

    // Using .Any() is a better choice instead of .Contains()
    // .Contains is used to check if a list contains an item while .Any will look for an item in a list with a specific ID
    var listOfRestaurantsReservations = db.RestaurantReservationEvents
        .Where(p => RestaurantIDRestaurantTbl.Any(r => r.pRestaurantID == p))
        .ToList();
} 

Upvotes: 0

Related Questions