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

时间:2009-06-06 09:33:20

标签: linq-to-sql

鉴于此表:

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 个答案:

答案 0 :(得分:2)

请注意,对于单个列,您可以完全摆脱anon类型,只需select f.P1,但我会将其保留为2/3 / etc列...

怎么样:

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

答案 1 :(得分:0)

还有一个解决方案:

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