Suppose I have a list of `{City, State}`. It originally came from the database, and I have LocationID, but by now I loaded it into memory. Suppose I also have a table of fast food restaurants that has City and State as part of the record. I need to get a list of establishments that match city and state.

NOTE: I try to describe a simplified scenario; my business domain is completely different.

I came up with the following LINQ solution:

```
var establishments = from r in restaurants
from l in locations
where l.LocationId == id &&
      l.City == r.City &&
      l.State == r.State
select r

```

and I feel there must be something better. For starters, I already have City/State in memory - so to go back to the database only to have a join seems very inefficient. I am looking for some way to say `{r.City, r.State} match Any(MyList)` where MyList is my collection of City/State.

**UPDATE**
I tried to update based on suggestion below:

```
List<CityState> myCityStates = ...;
var establishments =
from r in restaurants
join l in myCityStates
    on new { r.City, r.State } equals new { l.City, l.State } into gls
select r;

```

and I got the following compile error:
`Error CS1941 The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'.`

**UPDATE 2**
Compiler didn't like anonymous class in the join. I made it explicit and it stopped complaining. I'll see if it actually works in the morning...