You can do it with Linq:
DataTable dtOne = new DataTable();
dtOne.Columns.Add("ruleid", typeof(int));
dtOne.Columns.Add("descp", typeof(string));
dtOne.Rows.Add(1, "hello");
dtOne.Rows.Add(2, "there");
dtOne.Rows.Add(3, "world");
DataTable dtTwo = new DataTable();
dtTwo.Columns.Add("hotelid", typeof(int));
dtTwo.Columns.Add("ruleid", typeof(int));
dtTwo.Rows.Add(1, 1);
dtTwo.Rows.Add(2, 1);
dtTwo.Rows.Add(3, 2);
dtTwo.Rows.Add(4, 3);
dtTwo.Rows.Add(5, 4);
var results = from rowOne in dtOne.AsEnumerable()
join rowTwo in dtTwo.AsEnumerable() on rowOne.Field<int>("ruleId") equals rowTwo.Field<int>("ruleid")
where rowTwo.Field<int>("hotelid") == 3
select new { hotelid = rowTwo["hotelid"], descp = rowOne["descp"] };