2012-04-22 2 views
2

SQL Serverへのプレーン接続では、単純なSELECTステートメントで返す列を指定できます。 EFでEntity Frameworkで必要なものだけを取得する

Dim who = context.Doctors.Find(3) ' Primary key is an integer 

上記戻りエンティティが持っているすべてのデータが...しかし...私はSQLで何をすることができますやると私は必要なものだけを取得したいと思います。この行う

Dim who= (From d In contect.Doctors 
        Where d.Regeneration = 3 
        Select New Doctor With {.Actor = d.Actor}).Single 

は私に、このエラーを与える:

The entity or complex type XXXXX cannot be constructed in a LINQ to Entities query.

だから... ...どのように私は1つのエンティティのみから選択されたデータのみを返すのですか?

Dim who= (From d In contect.Doctors 
        Where d.Regeneration = 3 
        Select d.Actor).Single 
+2

参照は[こちら](http://stackoverflow.com/questions/5325797/the-entity-試してみてくださいエンティティ問合せでは構成できません)。 –

+0

@JessevanAssenいいリンクと、なぜコメントの良い説明 – Manatherin

答えて

0

上位レベルは」 次に、あなたの一例としてのViewModelは次のようになります。

public class DoctorViewModel{ 
public string Actor {get;set;} 
// You can add as many properties as you want 
} 

、クエリは次のようになります。

var who = (From d In contect.Doctors 
        Where d.Regeneration = 3 
        Select New DoctorViewModel {Actor = d.Actor}).Single(); 

申し訳ありませんが、私はC#のでコードを書いたが、私はアイデアは明らかだと思います:)

0

あなたは、単にこれを行うことができます。それはあなたが

var who = (from x in contect.Doctors 
      where x.Regeneration == 3 
      select new { Actor = x.Actor }).Single(); 

(#コードC申し訳ありません)のような匿名型を作成した場合は、その後、

var doctor = new Doctor() { 
    Actor = who.Actor 
}; 

を行くことができますが、それはあなたのような強く型付けされたまたは複合型としてそれを構築することはできません動作します「再生番号を持つ医師が存在しないか、それがスローされますつ以上が存在する場合にも、あなたは、singleの使用に注意する必要があり

var who = (from x in contect.Doctors 
      where x.Regeneration == 3 
      select new Doctor { Actor = x.Actor }).Single(); 

でやろうとして再例外であるsingleordefaultはより安全ですが、複数の一致がある場合は例外がスローされます。 FirstまたはFirstordefaultは何も存在しない場合にのみ、例外がスローされますとFirstordefaultはほとんど何でも扱うことができるFirstはるかに良いオプションです

これを行うための最善の方法は、あなたが扱っている場合のViewModelで望んでいたのプロパティを設定する「またはDTOである
1

基本的に、私はなぜわからないんだけど、LINQのは、複合型を作成することはできません。

0

この

Dim who = contect.Doctors.SingleOrDefault(Function(d) d.Regeneration = 3).Actor 
+0

* Regeneration == 3 *のレコードがない場合、これは例外をスローしませんか? – McGarnagle

関連する問題