2

我对编程很陌生,我似乎找不到解决方法。也许还有更好的方法。

我试图从我的数据库中的单行中获取 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 和 close }?(DataTime 和 DataValue 是数据库中的字段标签)。

非常感谢您的帮助。

亲切的问候,

朱利安

4

2 回答 2

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>而不是构建匿名类。

如果您没有将查询结果用于写入文件以外的任何内容,我会使用这种方法。如果您在其间的其他代码中使用匿名类,则第一个将使您无需更改该代码。

于 2012-06-14T20:02:37.847 回答
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);

根据 Reed 的帖子更新

于 2012-06-14T20:04:30.017 回答