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

LinqToSQL-仅具有某些属性的读取对象

  •  1
  • alex2k8  · 技术社区  · 15 年前

    给出该表:

    Foo
      P1
      P2
      P3
    

    我怎样才能只用P1来读Foo?我的实施:

    public Foo GetFooWithP1(int id)
    {
         using (DbDataContext db = new DbDataContext())
         {
            var query =
                from f in db.Foos
                where f.Id == id
                select new
                {
                    P1 = m.P1
                };
    
            var data = query.SingleOrDefault();
    
            return new Foo
            {
                P1 = data.P1
            };
        }
    }
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   Marc Gravell    15 年前

    注意,对于单个列,可以完全去掉anon类型,只需 select f.P1

    怎么样:

        var query =
            (from f in db.Foos
            where f.Id == id
            select new { f.P1 }).AsEnumerable()
               .Select(row => new Foo { P1 = row.P1});
    

    最主要的是打破构图; AsEnumerable() 这是为了我们。

    我还为DbLinq编写了一些代码,允许这种类型的构造在本地进行——它可以在LINQ到SQL上工作;它在usenet某处。。。

    你也可以使用类似 PropertyCopy() ( MiscUtil )为了避免自己绘制地图:

    var tmp = (from f in db.Foos
               where f.Id == id
               select new { f.P1 }).Single();
    return PropertyCopy<Foo>.CopyFrom(tmp);
    
        2
  •  0
  •   alex2k8    15 年前

    db.ExecuteQuery<Foo>("SELECT Id, P1 FROM Foos WHERE Id = {0}", id).Single();