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) .ToCsvValue()).ToArray()); csvBuilder.AppendLine(line); } 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); } } }
This code adds .ToCsv()
extension method to any IEnumerable
so you can run something like
string csv = linqQuery.ToCSV()
Unfortunately this doesn’t work if your query is Dynamic LINQ query Continue reading →