you are using FirstOrDefault() to get the first result only. That's why it's giving only reference 2 not other.
if you need first result only then use
var result = (from p in object1.list1
from f in object2.lst
where f.info.code1 == p.info.code1
select f.reference).FirstOrDefault();
If you need both Result then use
var result = (from p in object1.list1
from f in object2.lst
where f.info.code1 == p.info.code1
select f.reference).ToList();
If you need last result only then use
var result = (from p in object1.list1
from f in object2.lst
where f.info.code1 == p.info.code1
select f.reference).LastOrDefault();