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

Linq 我是否可以使用此方法从数据库中获取值,但不生成其他文本?,linq,entity-framework,Linq,Entity Framework,我对编程非常陌生,似乎找不到解决这个问题的方法。也许还有更好的办法 我试图从数据库中的一行中获取2个值。我已使用EF连接到它 我的代码是: using (var myEntities = new dataEntities()) { var myValues = (from values in myEntities.PointValues where values.PointID == dataValue && values.DataTime

我对编程非常陌生,似乎找不到解决这个问题的方法。也许还有更好的办法

我试图从数据库中的一行中获取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();
使用(var myEntities=new dataEntities())
{
var myValues=(来自myEntities.PointValues中的值

其中values.PointID==dataValue&&values.DataTime>=fromDate&&values.DataTime您只需更改写入信息的方式:

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);
var myValues=(来自myEntities.PointValues中的值
其中values.PointID==dataValue&&values.DataTime>=fromDate&&values.DataTime string.Format(“{0},{1}”,v.DataTime,v.dataValue));
writeAllines(@“c:\Test.csv”,myValues);
这将只构建一个
IEnumerable
,而不是构建匿名类


如果您不将查询结果用于除写入文件之外的任何事情,我将使用这种方法。如果您在其间的其他代码中使用匿名类,第一种方法将使您不需要更改该代码。

在末尾添加另一个选择

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

(根据Reed的帖子更新)

为什么要构建匿名类型,然后从中构建一个字符串?@ReedCopsey+1是一个很好的注释。如果是实体框架,则没有string.Format()命令传递给SQL server,使其引发异常。其次,如果只选择所需的值,则不会从数据库中检索所有列,从而降低传输的数据量。这是一个好的方面,尽管不需要调用ToList()两次-这增加了效率…@ReedCopsey依赖于
myValues
的使用。目前,第二次是不需要的。第一次强制从数据库中枚举(检索)记录。因为我使用了
var
,如果我不使用
ToList()
var变为
IEnumerable
,但使用它var becaomse
List
。第一个变量可以使用.AsEnumerable()。它避免构建完整列表,因为它将通过第二个选择流式传输结果,然后使用Linq to对象。第二个变量不需要写入文件,因为不需要通过索引访问。(看我的答案,明白我的意思)太好了,谢谢你的帮助。
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);
File.WriteAllLines(@"c:\Test.csv", myValues);