Refactor selective item by highest create date or update date
You could try and make LINQ do more, to me it is more readable but it may not be to your style.

var allCostsInThisPo = CostRepository
                       .GetAll()
                       .WhereInPo(po.po_surr_key);

if (allCostsInThisPo.Any())
{    
    var costWithMaxCreatedDate = allCostsInThisPo.OrderByDescending(item =&gt; item.create_date)
                                                        .Select(c =&gt; new { Name = c.CreatedByUser.user_fullname, Date = c.create_date})
                                                        .First();

    // if there is a max edited date greated than the cost created date then this will
    // be populated, otherwise will be null. 
    var costWithMaxEditedDate = allCostsInThisPo.Where(item =&gt; item.update_date.HasValue &amp;&amp; item.update_date.Value &gt; costWithMaxCreatedDate.Date)
                                                          .OrderByDescending(c =&gt; item.update_date.Value)       
                                                          .Select(c =&gt; new { Name = c.EditedByUser.user_fullname, Date = c.update_date.Value})                                                                                                  
                                                          .FirstOrDefault();

    var maxCost = costWithMaxEditedDate ?? costWithMaxCreatedDate;

    history.AllocationInfo = BuilkConstant.LogHistorySetting.GetAllocationHistoryLogDisplay(maxCost.Name, maxCost.Date); 
}