我可以使用此方法从数据库中获取值,但不生成其他文本吗?

时间:2012-06-14 19:58:32

标签: linq entity-framework

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

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

非常感谢您的帮助。

亲切的问候,

儒略

2 个答案:

答案 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);

根据里德的帖子更新