Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Here's A Tip
Message
General information
Forum:
ASP.NET
Category:
Coding, syntax and commands
Title:
Here's A Tip
Miscellaneous
Thread ID:
01478467
Message ID:
01478467
Views:
106
.Net 4.0 brought us the SortedSet:
http://msdn.microsoft.com/en-us/library/dd412070.aspx

This collection class is really handy as each item added to it is automatically placed at the
appropriate location in the list so that the list remains sorted. In addition, the SortedSet handles
all this with little to no affect on performance.

However, there is no extension method that allows you to write a Linq query and get the results in
a SortedSet. Of course you can order a List using Linq, but the advantage of the SortedSet is that
each item added to the list, before or after the Linq query is run, will automatically be placed in the correct location.

So, here's a simple extension method to return the results of a Linq query into a SortedSet:
public static SortedSet<T> ToSortedSet<T>(this IEnumerable<T> t)
{
    SortedSet<T> retval = new SortedSet<T>();

    t.ToList().ForEach(x => retval.Add(x));

    return retval;
}
And here's how to use it:
static void Main(string[] args)
{
    // Create some customer objects and add them to a SortedSet.         
    Customer cust1 = new Customer { CustomerName = "Wal Mart", CreditBalance = 525565.55M};
    Customer cust2 = new Customer { CustomerName = "Ziggy's"};
    Customer cust3 = new Customer { CustomerName = "Bill's Place", CreditBalance = 2545.18M };

    SortedSet<Customer> customers = new SortedSet<Customer>();

    customers.Add(cust1);
    customers.Add(cust2);
    customers.Add(cust3);


    // Query the sorted set using Linq 
    var custs = (from c in customers
                    select c).ToSortedSet();

    // Add an item to the result set. You will see that it appears first in the list
    custs.Add(new Customer { CustomerName = "Able's Axel Shop" });


    // Show the results
    foreach (Customer customer in custs)
        Console.WriteLine(customer.CustomerName);

    Console.ReadLine();
}
And finally, here's the Customer class. In the CompareTo you can decide
how the SortedSet will sort:
 public class Customer : IComparable
{
    public string CustomerName { get; set; }
    public DateTime? DateAdded { get; set; }
    public decimal? CreditBalance { get; set; }

    public int CompareTo(object obj)
    {
        if (obj is Customer)
        {
            Customer c = (Customer)obj;

            return CustomerName.CompareTo(c.CustomerName);
            //return CustomerName.CompareTo(c.CreditBalance.ToString());
        }
        else
            throw new ArgumentException("Object is not a Customer.");

    }
}
Everything makes sense in someone's mind
public class SystemCrasher :ICrashable
In addition, an integer field is not for irrational people
Reply
Map
View

Click here to load this message in the networking platform