武德三年(公元620年)七月,秦王李世民统筹调度关中及各路精锐大军,全线出兵攻打盘踞东都洛阳的割据势力王世充,唐军主力浩浩荡荡开赴前线,在谷州安营扎寨,摆开长期作战的架势。王世充得知唐军来攻,亲自率领三万精兵,赶赴慈涧一带列阵迎战,企图凭借优势兵力阻挡唐军东进。李世民深知敌军虚实,亲率一支轻装骑兵前往慈涧,试探敌军实力、引诱其出兵。
交战之初,唐军轻骑兵兵力悬殊,陷入王世充大军的重重包围之中,身边随从将士见敌军密密麻麻,全都面露恐惧,军心一度慌乱。李世民临危不乱,沉着命令左右随从先行突围归营,自己独自一人率领少数亲兵殿后,断后阻击追兵。混乱之中,王世充麾下头号勇将单雄信,率领数百精锐骑兵抄近路夹道逼近,骑兵们策马扬刀,争前恐后地围攻李世民,刀锋直逼身前,李世民数次身陷险境,险些被单雄信活捉。
危急关头,李世民镇定自若,弯弓搭箭,左右开弓,箭术精准无比,每一发箭矢射出,都有敌军应弦倒地,接连射杀数名敌军骁将,震慑住了敌军攻势。激战中,李世民还顺势生擒王世充麾下大将燕颀,极大打击了敌军士气。王世充见战局不利,担心主力受损,不敢再恋战,当即下令将慈涧驻守的军队全部撤回东都洛阳,依托洛阳城防固守。
稳住前线局势后,李世民运筹帷幄,展开全面的战略部署,切断王世充的外围支援与补给。他派遣行军总管史万宝率军从宜阳南下,迅速占据军事要地龙门,扼守洛阳南部通道;命令刘德威领兵从太行山东进,将河内地区团团包围;派遣王君廓率部突袭洛口,彻底斩断洛阳敌军的运粮通道,让洛阳陷入粮草断绝的危机。同时,又命黄君汉趁着夜色掩护,率领水军乘战船从孝水河顺流而下,偷袭回洛城,一举攻克这座战略重镇,拔掉洛阳外围重要屏障。
此番部署之下,黄河以南的各州郡县大为震动,各地州县官吏、守城将领纷纷认清形势,接连不断地举城归降唐军,王世充的势力范围迅速瓦解。李世民趁机率领大军挺进,进驻邙山,兵临洛阳城下,对东都形成合围之势。
同年九月,李世民为进一步探查洛阳周边地形与敌军布防,亲率五百名骑兵先行巡视阵地,不料在途中与王世充率领的一万多主力部队意外遭遇。敌军兵力数倍于唐军,形势骤然危急,但李世民丝毫不惧,当即指挥骑兵列阵迎战,身先士卒率军冲锋。唐军将士奋勇拼杀,再次大败王世充军队,一战斩杀敌军三千余人,俘虏王世充麾下大将陈智略,王世充丢盔弃甲,仅孤身一人狼狈逃回洛阳城。经此一役,王世充势力彻底萎靡,其部署的筠州总管杨庆当即派使者向李世民请求归降,李世民随即派李世勣率军从轘辕道出发,前往安抚接纳杨庆的部众。随后,荥、汴、洧、豫等九州相继遣使归降,王世充困守洛阳孤城,陷入外无援兵、内无粮草的绝境,无奈之下,只得暗中派遣使者,前往河北,向割据势力窦建德求救。
武德四年(公元621年)二月,李世民率领大军进驻青城宫,唐军的防御营垒还未来得及修筑完成,王世充便孤注一掷,亲率两万大军从方诸门倾巢而出,依托谷水摆开阵势,企图趁唐军立足未稳发起突袭。李世民沉着应战,立刻下令精锐骑兵在北邙山列阵,又命屈突通率领五千步兵渡过谷水,主动攻击王世充大军,临行前特意再三告诫屈突通:“等两军交战之时,立刻施放狼烟信号,我亲率骑兵南下支援,与你里外合击。”
待到两军刚一接战,狼烟瞬间升起,李世民当即率领精锐骑兵冲锋陷阵,自己挺身在前,一马当先冲入敌阵,与屈突通的步兵部队相互呼应、合力猛攻。王世充的军队深知已是背水一战,全都拼死作战,阵型多次被唐军冲散,又多次重新集结,战况异常惨烈,厮杀声震天动地。这场激战从清晨一直持续到傍晚,历经数个时辰,王世充的军队早已疲惫不堪、伤亡惨重,再也无力支撑,开始全线退却。李世民趁机指挥全军乘胜追击,一路掩杀,共计俘获、斩杀敌军八千余人,随后率军推进至洛阳城下,安营扎寨,将洛阳城彻底围困。
经此一战,王世充再也不敢出城迎战,只能下令全军紧闭城门,环城固守,死守待援,一心期盼窦建德率军前来救援。李世民随即命令各路大军环绕洛阳城挖掘深沟、修筑高垒,布置严密的包围圈,展开长期围困,彻底困死城中敌军。与此同时,吴王杜伏威全力响应唐军,派遣麾下大将陈正通、徐召宗率领两千精兵赶赴李世民军营,会合协同作战;伪郑州司马沈悦眼见大势已去,献出虎牢关向唐军投降,唐军将领王君廓及时率军接应,一举活捉伪荆王王行本,洛阳周边残余势力尽数被清除。