Refactor Linq grouping
You can use an interface and a generic method to remove the code duplication:

public interface IStatistic
{
    string Country {get; set;}
    DateTime Date {get; set;}
    Decimal Total {get; set;}
}

public static class StatisticExtension
{
    public static void MergeNullAndEmplyCountry&lt;T&gt;(this IEnumerable&lt;T&gt; totalUserStatistic) where T : IStatistic, new()
    {
        foreach (var item in totalUserStatistic)
            if (string.IsNullOrWhiteSpace(item.Country))
                item.Country = "";

        totalUserStatistic = totalUserStatistic.GroupBy(item =&gt; new { item.Country, item.Date })
                                                .Select(groupedUser =&gt; new T() 
                                                { 
                                                    Country = groupedUser.Key.Country, 
                                                    Total = groupedUser.Sum(item =&gt; item.Total), 
                                                    Date = groupedUser.Key.Date 
                                                }).ToList();
    }
}


Important here is the new() constraint, which allows us to create an instance of T.

If the Total property of a class is int instead of decimal, we can make use of an explicit interface implementation:

public class BlaStatistic : IStatistic
{
    public string Country {get; set;}
    public DateTime Date {get; set;}
    public Int32 Total {get; set;}
    Decimal IStatistic.Total 
    {   
        get { return Convert.ToDecimal(Total); }
        set { Total = Convert.ToInt32(value); }
    }
}


Also, your extension method should actually return something, because it won't change the IEnumerable&lt;...&gt; you pass in:

public static IEnumerable&lt;T&gt; MergeNullAndEmplyCountry&lt;T&gt;(this IEnumerable&lt;T&gt; totalUserStatistic) where T : IStatistic, new()
{
    ...
    return totalUserStatistic.GroupBy...
}