Linq 我是否可以使用此方法从数据库中获取值,但不生成其他文本?
我对编程非常陌生,似乎找不到解决这个问题的方法。也许还有更好的办法 我试图从数据库中的一行中获取2个值。我已使用EF连接到它 我的代码是: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
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 becaomseList
。第一个变量可以使用.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);