2009-06-06 42 views
1

鑑於這種表:LinqToSQL - 閱讀對象,只有某些屬性

Foo 
    P1 
    P2 
    P3 

我怎麼能只用P1讀富?我的執行:

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

注意,對於單個列,你可以完全擺脫了匿名類型的,只是select f.P1,但我會離開,在它擴展到2/3 /等列...

如何約:

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); 
+0

謝謝,馬克,爲你提示!現在讓我把事情複雜化:-) http://stackoverflow.com/questions/959417/linqtosql-read-objects-hierarchy-with-only-certain-properties – alex2k8 2009-06-06 10:19:15

0

還有一個解決辦法:

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