2009-05-14 15 views
2

エンティティフレームワークをlinqでSQLにクエリしてオブジェクトPersonを持っていても、そのオブジェクトの2つのプロパティしか必要ではありませんが、オブジェクト全体?Entity - Linq to Sql

例:名前、年齢、住所、国、言語...私は唯一のプロパティの名前と年齢を使用する必要が

私はプロパティを持つPersonエンティティを得ました。だから私は住所、国、その他の財産を読み込む必要はありません...何が記憶にあり、どんなタイプの質問がSQLに求められますか?

私のLINQクエリの場合:

public IQueryable<Person> FindAllPersons() 
{ 
    return from person in db.Persons 
      select person; 
} 

以降のコードでは、私が唯一、リスト内の各個人の名前や年齢プロパティを呼び出します。

答えて

2

必要なフィールドのみを照会することができます。あなたはLINQで全体の人物オブジェクトを選択した場合は、そのオブジェクトにアクセスするときに同様

public IQueryable<Person> FindAllPersons() 
{ 
    return from person in db.Persons 
      select new Person(){Name = person.Name, Age = person.Age}; 
} 
+2

私はそれを試してみましたが、私は次の非サポート例外が出ます:「エンティティまたは複合型 『CompleteKitchenModel.Contactは、』エンティティクエリにLINQで構築することができません。」 私はここに質問を掲示しました:http://stackoverflow.com/questions/2011100/loading-partial-entities-with-linq-to-entities – Shimmy

2

、そして、全体の人がメモリにロードされます。特定のフィールドのみを選択する場合は、選択基準を絞り込む必要があります。例:

var persons = from p in db.Persons select new { p.Name, p.Age }; 
2

これは必ずしも必要ではありませんが、EFまたはLinq2SQLのどちらを使用するかを指定したい場合があります。しかし、実際にどちらを使用しているかによって、SQLは潜在的に異なる可能性があります。

指定したクエリから、データベース列に関連付けられたすべてのプロパティが(エンティティ参照でない限り)オブジェクトに格納されます。他のプロパティで遅延ロードを効果的に使用できますが、これはブランケットソリューションではなく、おそらくアプリケーションの別の領域で生産性が低下します。私が言っていることは、アプリケーションが非常にメモリに敏感で、オブジェクトをそのままロードしなければならないということではありません。

...名前だけと年齢別の方法として

var list = db.Persons.Select(person => new Person() { Age = person.Age, Name = person.Name }); 
3

をロードするには、あなたは即座にロードされないようにするすべての列に対してtrueにロードされた遅延時間を設定することができます。

+0

私にその例へのリンクやリンクを教えてもらえますか? – Melursus

1

デザイナ内の各エンティティ列には、Delay Loadedプロパティがあります。これをtrue(デフオルト値がfalse)に設定すると、プロパティのインスタント読み込みが無効になり、コード内でアクセスされたときにのみロードされます。

0
public IQueryable<Persons> GetApplicationRoleList() 
    { 
     return DBContext.Persons.AsQueryable(); 
    } 

;)