2017-06-07 9 views
1

でデータを転送し、これは私のクラスであるエンティティフレームワークは、私がEF6</p> <p>を使用していますバイト

このコードを使用する場合(バイト)サーバからクライアントに転送されますどのくらいの
public partial class tbl_Persons 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public byte Age { get; set; } 
    } 

using (var db = new testEntities()) 
{ 
    var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234).Age; 
} 

だけ転送{(AGE)(1バイト)}または転送されるすべてのプロパティ{(ID +名前+年齢)(10バイト)}次に、クライアント上の年齢を選択?

どのように(Age)(1バイト)のみ転送できますか?

+0

次のコード 'var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234).Age;'がスローする可能性があります。 'var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234)?年齢;' – tschmit007

+1

ところで:年齢を格納するのは危険です(生年月日を格納する)。人の年齢を128に制限するのは危険です。 – tschmit007

+0

ありがとうございます。これは私の本当のクラスではありません。それはちょうどテストのためです –

答えて

2

式(Iはサーバーから最小限のデータを転送する必要がある)

var q = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234).Age; 

ですから、最初に取得し、データベースから(すべてのプロパティを持つ)オブジェクト全体を実体

var person = db.tbl_Persons.FirstOrDefault(a => a.ID == 1234); 
var age = person.Age; 

のと同じです結果から単一のプロパティ(あなたの場合はbyte)を取得します。

問題のちょうどプロパティを取得するためには、あなたはとても簡潔な、しかし、より効率的ではありませんWhere + Select + FirstOrDefault(ない述語バージョン)を使用しないでください。

var age = db.tbl_Persons.Where(p => p.ID == 1234).Select(p => p.Age).FirstOrDefault(); 

またはクエリ構文で

var age = (from p in db.tbl_Persons where p.ID == 1234 select p.Age).FirstOrDefault(); 
+0

これは私のための最善の答えです –

関連する問題