如何将Linq查询结果导出到Excel,就像在LinqPad中一样

4
我有一个包含许多子查询的对象,我想要像Linqpad一样导出到Excel,以下是示例图: enter image description here 请问有什么帮助吗?谢谢。

@dougajmcdonald,实际上正确的单词是子查询,抱歉。 - Alexandre
4个回答

10
如果你在项目中引用了linqpad.exe,那么你就可以使用它来将数据导出为HTML文件。例如:
List<User> users  = ....
var filename = "test.html";

var writer = LINQPad.Util.CreateXhtmlWriter();
writer.Write(users);

System.IO.File.WriteAllText(filename, writer.ToString());

// Open the file in excel
Process.Start("Excel" , filename); 

3

Excel 可以打开被重命名为 "xls" 的 HTML 文档,并将 HTML 表格结构读入 Excel 单元格。

但你需要将你的数据输出为 HTML 格式。


但是如何将Ienumerable导出到HTML呢? - Alexandre

1
如前所述,LinqPad并不真正支持导出Excel格式,但它会创建一个HTML文件,并使用Ms-Excel打开它。 (但对于下载文件,您无法强制客户端如何打开该文件,但您可以将扩展名命名为XLS,然后EXCEL会以警告方式打开它)。
要生成HTML输出,LinqPad使用hyperlinq库。
void Main()
{
    var filePath = Path.GetTempPath() + "output.html"; //or output.xls but with ms-excel warning
    var iEnumerbleValue = Enumerable.Range(1, 500).Select(e => new { a = 1, b = e });
    File.WriteAllText(filePath,  CreateHtml(iEnumerbleValue).ToString());
    Process.Start("EXCEL.EXE", filePath); 
}



HDoc CreateHtml<T>(IEnumerable<T> coll)
{
    var fields = typeof(T).GetProperties();

    return H.Doc(
            H.head(H.style()),
            H.body(
             H.table(
                H.tbody(
                    H.tr(fields.Select(f => H.th(f.Name))),
                    from item in coll
                    select H.tr(
                        fields.Select(f => H.td(f.GetValue(item)))
                    )
                        )
                    )
                  )
                );
}

0
我想为下一个搜索这个问题的人添加这个解决方案。我知道这是一个老问题,但这是我搜索到的唯一结果。
您可以在命令行上运行“lprun”。
lprun -format=html yourQuery.linq > output.xls

Excel可以打开HTML文件,只要它的扩展名是xls而不是xlsx。如果使用xlsx,则会提示格式错误并无法打开。使用xls扩展名时,它会给出一个消息,但仍然可以打开。

顺便提一下- 我需要一个用于实体框架的数据库连接字符串。我在linqpad.config中找到了它,但花了一段时间才弄清楚为什么lprun无法读取它。您必须将连接字符串部分添加到lprun.exe.config中,以便lprun可以使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接