鉴于此表:
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
};
}
}
还有其他选择吗?
答案 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();