我正在尝试将一个表放入逗号分隔的CSV文件中。我目前是这样实现的:
var csv = new StringBuilder("id,Name,Address,City,State\n");
var delimiter = ",";
var newline = "\n";
using (var db = MyDatabase())
{
var query = from c in db.Customers select c;
foreach(var q in query)
csv.Append(q.id).Append(delimiter)
.Append(q.name).Append(delimiter)
.Append(q.address).Append(delimiter)
.Append(q.city).Append(delimiter)
.Append(q.state).Append(newline);
}
字符串
这就创建了一个csv fine。但我的问题是,有没有一种更精简的方法可以实现这一点,而不需要单独指定每一列?在某些情况下,我想做一个select all**,但由于表中有很多列,这似乎有点笨拙。
4条答案
按热度按时间qlckcl4x1#
为了在不指定要写入CSV的每个属性的情况下做到这一点,您需要使用反射。下面是如何做到这一点的基本示例:
字符串
这将遍历查询中的每个Customer,然后遍历Customer中的每个属性并写入值。这是假设您希望将Customer中的每个属性写入CSV文件。这至少应该给予您关于如何完成您想要完成的任务的想法。
41ik7eoe2#
你想要达到的最短路径可能是:
字符串
您可以很容易地使其更通用,但随后您将需要缓存反射的PropertyInfo,以避免在类型上大量使用反射。
警告:你应该正确地转义属性值,因为换行符,逗号,引号等会破坏你的CSV文件。更好的是,使用一个已经解决了编写正确CSV文件问题的库。
5q4ezhmt3#
我使用这个代码:
字符串
kfgdxczn4#
不依赖于特定表格格式的代码:
字符串