代码之家  ›  专栏  ›  技术社区  ›  shkipper

捕捉点是什么(在Linq中选择New,而不是简单地填充对象)

  •  0
  • shkipper  · 技术社区  · 16 年前

    有人能解释一下这两段代码之间的区别吗?

    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.
    

    第二个有效。

    谢谢您!

    1 回复  |  直到 16 年前
        1
  •  1
  •   Richard    16 年前

    在第一个代码中没有 c 将从中读取 SomeTable 或实例 SomeObject 将被创建,直到某些项枚举 temp .

    第二次枚举发生。

    因此,我希望有一个问题与有效性 Context.SomeTable 什么时候 临时雇员 在第一种情况下枚举。

    通过将第一个块更改为:

    var temp = (from c in Context.SomeTable 
                select new SomeObject { name=c.Name, created = c.Created}
               ).ToList();
    

    它强制立即枚举。

    推荐文章