有人可以解释这两段代码之间的区别:
var temp = (from c in Context.SomeTable
select new SomeObject { name=c.Name, created = c.Created}).ToList();
和此:
var temp = (from c in Context.SomeTable select c);
foreach(SomeTable t in temp)
{
SomeObject so = new SomeObject();
so.name = t.Name;
so.created = t.Created;
}
SomeTable.Created
是数据库中可以为空的日期时间类型字段。
虽然第一件作品引发了异常:
Sqldatetime overflow. must be between 1/1/1753 12:00:00 am and 12/31/9999 11:59:59 pm.
第二个有效。
谢谢!
答案 0 :(得分:1)
在第一个代码中,c
将不会读取SomeTable
,或者SomeObject
的实例将被创建,直到枚举temp
为止。
第二次进行此枚举。
因此,我认为在第一种情况下枚举Context.SomeTable
时temp
的有效性存在问题。
通过将第一个块更改为:
来测试此项var temp = (from c in Context.SomeTable
select new SomeObject { name=c.Name, created = c.Created}
).ToList();
强制立即枚举。