Search code examples
c#telerik-open-access

How to convert Telerik ORM entity list to csv file


Is there easier way to convert telerik orm entity list to csv format?


Solution

  • The following simple static class will help you in this task. Note that it will create a .csv file, which contains the values of the entity's properties without taking into account the navigation properties:

    public static partial class EntitiesExporter
    {
        public static void ExportEntityList<T>(string fileLocation, IEnumerable<T> entityList, string seperator = " , ")
        {
            string content = CreateFileContent<T>(entityList, seperator);
            SaveContentToFile(fileLocation, content);
        }
    
        private static string CreateFileContent<T>(IEnumerable<T> entityList, string seperator)
        {
            StringBuilder result = new StringBuilder();
            List<PropertyInfo> properties = new List<PropertyInfo>();
            foreach (PropertyInfo item in typeof(T).GetProperties())
            {
                if (item.CanWrite)
                {
                    properties.Add(item);
                }
            }
    
            foreach (T row in entityList)
            {
                var values = properties.Select(p => p.GetValue(row, null));
                var line = string.Join(seperator, values);
                result.AppendLine(line);   
            }
    
            return result.ToString();
        }
    
        private static void SaveContentToFile(string fileLocation, string content)
        {
            using (StreamWriter writer = File.CreateText(fileLocation))
            {
                writer.Write(content);
                writer.Close();
            }
        }
    }
    

    You can consume the class like this in your code:

    using (EntitiesModel dbContext = new EntitiesModel())
    {
        IQueryable<Category> cats = dbContext.Categories;
    
        string appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        string fileLocation = Path.Combine(appDir, "test.csv");
        EntitiesExporter.ExportEntityList<Category>(fileLocation, cats);
    }
    

    I hope this helps.