I have a simple function to get a list of conference rooms from DB.
I am using the following function:

```
    public List<ConferenceRoom> RunRoomQuery<T1>(T1 fieldValue, Func<ConferenceRoom, T1, bool> predicate)
    {
        var confRooms = _dataContext.ConferenceRooms.Where(delegate(ConferenceRoom c)
        {
            return predicate(c, fieldValue);
        });
        return confRooms.ToList();
    }

```

It works fine; but as you noticed, I am passing a "ConferenceRoom" type.
Instead, I would like to make it more generic and pass T2 like this:

```
    public List<T2> RunRoomQuery<T1,T2>(T1 fieldValue, Func<T2, T1, bool> predicate)
    {
        var confRooms = _dataContext.ConferenceRooms.Where(delegate(T2 c)
        {
            return predicate(c, fieldValue);
        });
        return confRooms.ToList();
    }

```

confRoom.ToList() doesn't compile and "Where" is not happy about it either.

QUESTION: WHY? WHAT IS IT THAT I AM MISSING?
Following are errors:

```
error CS0305: Using the generic method 'ConferenceDB.ConferenceDb.RunRoomQuery<T1,T2>(T1, System.Func<T2,T1,bool>)' requires 2 type arguments
C:\Projects\ConferenceDB\ConferenceDB.cs(82,25): (Related location)
C:\Projects\ConferenceDB\ConferenceDB.cs(69,27): error CS0305: Using the generic method 'ConferenceDB.ConferenceDb.RunRoomQuery<T1,T2>(T1, System.Func<T2,T1,bool>)' requires 2 type arguments

```

Why?