質問には書いてないですが、Linq to Entities を使うとします。
そのためのコンテキストクラスとエンティティクラスは生成済みとして、以下のようにしてできると思います。コードは C# ですので注意。
まとめて書くと分かりにくいので、テーブル BB に該当する IQueryable<T> を Linq to Entities で取得する部分を分けて書きます。
テーブル BB に該当する SQL 文
(select ColA, max(ColB) as ColB From AA group by ColA) BB
Linq to Entities
var context = new XxxxxEntities(); // コンテキストクラス
var tableBB = from a in context.AA
group a by a.ColA into g
select new
{
ColA = g.Key,
ColB = g.Max(f => f.ColB)
};
AA と BB を内部結合する SQL 文
select ColC from AA
inner join BB
on AA.ColA = BB.ColA and AA.ColB = BB.ColB
Linq to Entities
var query = from a in context.AA
join b in tableBB
on a.ColA equals b.ColA
where a.ColB == b.ColB
select new
{
ColC = a.ColC
};
検証はしてません(できません)。