我对编程很陌生,似乎无法找到解决方法。也许还有更好的方法。
我试图从我的数据库中的单行中获取2个值。我使用EF连接到它。
我的代码是:
using (var myEntities = new dataEntities())
{
var myValues = (from values in myEntities.PointValues
where values.PointID == dataValue && values.DataTime >= fromDate && values.DataTime <= toDate
select new
{ values.DataTime,
values.DataValue
}).ToList();
然后我用这段代码将它们写入文件:
using (StreamWriter sw = new StreamWriter(@"c:\Test.csv"))
{
for (var i = 0; i < myValues.Count; i++)
{
sw.WriteLine(myValues[i]);
}
}
问题是生成的CSV文件是这样的: {DataTime = 1/20/2010 2:15:00 AM,DataValue = 11.72}
如何摆脱{DataTime =,DataValue和关闭}? (DataTime和DataValue是数据库中的字段标签)。
非常感谢您的帮助。
亲切的问候,
儒略
答案 0 :(得分:1)
您只需要更改信息的写法:
using (var sw = new StreamWriter(@"c:\Test.csv"))
{
foreach(var value in myValues)
{
sw.WriteLine(string.Format("{0}, {1}", value.DataTime, value.DataValue));
}
}
现在,您直接写出匿名类,而不是根据需要创建格式化的输出。
或者,您可以直接在查询中构建字符串,并使用以下命令轻松编写结果:
var myValues = (from values in myEntities.PointValues
where values.PointID == dataValue && values.DataTime >= fromDate && values.DataTime <= toDate
select new
{ values.DataTime,
values.DataValue
})
.AsEnumerable()
.Select(v => string.Format("{0}, {1}", v.DataTime, v.DataValue));
File.WriteAllLines(@"c:\Test.csv", myValues);
这只会构建一个IEnumerable<string>
而不是构建匿名类。
如果您不将查询结果用于写入文件以外的任何内容,我会使用此方法。如果你在其他代码中使用匿名类,那么第一个就是让你不需要改变那些代码。
答案 1 :(得分:1)
在最后添加另一个选择。
var myValues = (from values in myEntities.PointValues
where values.PointID == dataValue
&& values.DataTime >= fromDate
&& values.DataTime <= toDate
select new
{ values.DataTime,
values.DataValue
})
.ToList()
.Select(x => string.Format("{0}, {1}", x.DateTime, x.DataValue);
此外,如果你不需要铃声和您还可以使用StreamWriter的口哨File.WriteAllLines():
File.WriteAllLines(@"c:\Test.csv", myValues);
(根据里德的帖子更新)