Monthly Archives: September 2019

Dynamic LINQ to XML

Language Integrated Query (LINQ) is a cool feature of .NET languages like C# that allows you to perform SQL-like query right within the language against language’s data structures (lists, arrays etc.) But one drawback of LINQ – you have to know in advance, at compile time which fields to select, what filter conditions would be. Sometimes there’s a need to supply these at runtime – e.g. user selects which fields they want to see

Thankfully there exists Dynamic LINQ Library that allows you to supply LINQ parameters as a string akin Dynamic SQL. Here’s an example of such query from the library’s homepage:

var query = db.Customers
    .Where("City == @0 and Orders.Count >= @1", "London", 10)
    .Select("new(CompanyName as Name, Phone)");

Now, one thing that LINQ can do is query XML. So in theory if we load, say, this XML:

   <SERVER IP="">
   <SERVER IP="">

into an XElement and run something like this

var query0 = myXElement.Elements()
          .Select("new (Attribute(\"IP\").Value as IP, Element(\"OS\").Value as OS)")

it would produce list of IPs and OSes. Unfortunately this doesn’t work. Continue reading →

Export Dynamic LINQ to CSV

LINQ allows to perform various queries against different data structures. Wouldn’t it be great if you could easily export result of a LINQ query to CSV? Fortunately you can! This article by Scott Hanselman explain how and culminates in cool in its simplicity code:

namespace FooFoo
    public static class LinqToCSV
        public static string ToCsv<T>(this IEnumerable<T> items)
            where T : class
            var csvBuilder = new StringBuilder();
            var properties = typeof(T).GetProperties();
            foreach (T item in items)
                string line = string.Join(",",properties
                      .Select(p => p.GetValue(item, null)
            return csvBuilder.ToString();
        private static string ToCsvValue<T>(this T item)
            if(item == null) return "\"\"";
            if (item is string)
                return string.Format("\"{0}\"", item
                      .ToString().Replace("\"", "\\\""));
            double dummy;
            if (double.TryParse(item.ToString(), out dummy))
                return string.Format("{0}", item);
            return string.Format("\"{0}\"", item);

Continue reading →