我对编程非常陌生,似乎找不到解决这个问题的方法。也许还有一种更好的方法。
我正在尝试从我的数据库中的一行中获取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是数据库中的字段标签)。
非常感谢您的帮助。
致以亲切的问候,
朱利安
发布于 2012-06-14 20:02:38
你只需要改变你写出信息的方式:
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>
,而不是构建匿名类。
如果您只将查询结果用于写入文件之外的任何事情,那么我将使用这种方法。如果您在中间的其他代码中使用匿名类,第一个将使您不需要更改该代码。
发布于 2012-06-14 20:04:30
在末尾添加另一个select。
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);
(根据Reed的帖子更新)
https://stackoverflow.com/questions/11040468
复制相似问题