2009-06-06 6 views
1

そのようなテーブルを考える:LinqToSQL - のみ特定のプロパティを持つオブジェクトを読む

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

単一の列のためにあなたは完全に匿名型を取り除き、そしてちょうど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); 
+0

はありがとう、マーク、あなたのためのヒント!今私は物事を複雑にさせてください:-) http://stackoverflow.com/questions/959417/linqtosql-read-objects-hierarchy-with-only-certain-properties – alex2k8

0

もう一つの解決策:

db.ExecuteQuery<Foo>("SELECT Id, P1 FROM Foos WHERE Id = {0}", id).Single(); 
関連する問題