Well, look at what you are doing, and it's pretty obvious if you stop and think about it: how many different objects are you adding to
order.al
?
Surprisingly, it's not two. It's only one, just you try and add it with different values each time.
Think of it this way: if you look at your wallet, it's the same wallet even if you take some money out or put some more in - the value of the wallet changes, but the physical wallet doesn't.
The same thing happens here: you change the values in the "wallet":
arr.at_lname = lsname;
arr.at_qty = qty;
But you always add the same "wallet" to the list:
order.al.Add(arr);
What you need to do is create a new "wallet" each time round the loop. I can't tell you how exactly, because I don't have the part of your code where you create this one, but it's probably along the lines of
arr = new MyClassForArr();
Use your class name, and add that to the top of your while loop.