.Net的实体框架

Ber*_*amb 2 c# linq export-to-csv entity-framework-5

我正在使用最新的Entity Framework和DBContext.我有一个结果集,我想转换为逗号分隔值.我在VB DataTable中使用DataTables做了类似的事情来进行CSV提取.我有QuoteName方法工作.我还得到了使用foreach工作的GetCSV方法的衍生物.问题是它比DataTable的可比代码要慢得多.所以我希望有人会有一些建议.

    public static string GetCSV(this IQueryable entity)
    {
        if (entity == null)
        {
            throw new ArgumentNullException("entity");
        }
        Type T = entity.ElementType;
        var props = T.GetProperties(BindingFlags.Public | BindingFlags.Instance);
        string s = string.Empty;
        int iCols = props.Count();

        try
        {
            s += string.Join(",", (from int ii in Enumerable.Range(0, iCols)
                                   select props[ii].Name.QuoteName("[]")).ToArray());
            s += Environment.NewLine;
            foreach (var dr in entity)
            {
                s += string.Join(",", (from int ii in Enumerable.Range(0, iCols)
                                       select
                                           props[ii].GetValue(dr)
                                                    .ToString()
                                                    .QuoteName("\"\"", ",")).ToArray());
                s += Environment.NewLine;
            }
            s = s.TrimEnd(new char[] { (char)0x0A, (char)0x0D });
        }
        catch (Exception)
        {

            throw;
        }
        return s;
    }
Run Code Online (Sandbox Code Playgroud)

cka*_*kal 13

查看nuget包CsvHelper(http://nuget.org/packages/CsvHelper/).

以下是https://github.com/JoshClose/CsvHelper/wiki/Basics的用法示例

using (var csv = new CsvWriter( new StreamWriter( "Actors.csv" ) )) 
{
    csv.WriteRecords( actorsList );
}
Run Code Online (Sandbox Code Playgroud)