我使用 Entity Framework 和 Linq 来填充我的网格视图。我想在 Excel 中获得从 Linq 获得的相同数据。此外,同一个 Excel 表中的第二个选项卡应该来自另一个 Linq 查询。
什么是最简单和最好的方法?
这有两个部分。第一个是将您的 linq 集合序列化为 CSV。您可以像这样序列化一个可枚举的方法:
public static string ToCsv<T>(string separator, IEnumerable<T> objectlist)
{
Type t = typeof(T);
FieldInfo[] fields = t.GetFields();
string header = String.Join(separator, fields.Select(f => f.Name).ToArray());
StringBuilder csvdata = new StringBuilder();
csvdata.AppendLine(header);
foreach (var o in objectlist)
csvdata.AppendLine(ToCsvFields(separator, fields, o));
return csvdata.ToString();
}
该方法不会帮助您处理深层对象,但可以让您使用 CSV。第二阶段是构建 XSLX 格式(假设 2 个 CSV 还不够)。为此,我建议使用 Microsoft的 Open XML SDK从您的 CSV 字符串构建两个工作表。我也喜欢这个构建 Excel 电子表格的答案。