Performing Join on two tables

I am currently joining two tables to retrieve the data as follows

 var query = Db.From<DbCore.Table1>()
     .Join<DbCore.Table2>((t1, t2) => t1.Id== t2.Id)
     .SelectDistinct<DbCore.Table1, DbCore.Table2>(
         (t1, t2) => new CombineSet
         {
             Id= t2.Id,
             Party = t1.Party
         })
     .Where<DbCore.Table1, DbCore.Table2>(
         (t1, t2) => t1.Id== reqId
                     && reqMainId.Contains(t1.MainId)
                     && (t1.MainId== mainId|| t1.MainId== Defaults.MainId));

 var combineSets= await Db.SelectAsync<CombineSet>(query);

And I am getting error as follows

variable 't2' of type 'DbCore.Table2' referenced from scope '', but it is not defined

Am I missing something or is my joining condition is not right?

The custom Select expression needs to be an anonymous type, e.g:

 .SelectDistinct<DbCore.Table1, DbCore.Table2>(
     (t1, t2) => new { t2.Id, t1.Party })

Thanks @mythz that worked.
Just curiosity why I cant provide a particular type or model in which I want to have the data?
Why it needs to be anonymous?

Only anonymous types are supported. The purpose of the custom select is to specify only which columns you want selected.

This isn’t the same as LINQ 2 Memory Select which is used for projection, instead projection only occurs when specifying which Type to project the results into, e.g:

var results = db.Select<MyDto>(q);

The typed projection changes the lambda expression definition making it non trivial to support, but it’s also unintuitive as using a POCO implies the Select expression is being used for projection and when projection occurs when it’s not, i.e. its purpose is only for selecting which RDBMS columns or expressions should be queried.

Okay thanks for the help