2

SELECTSQL Serverへのプレーン接続を使用すると、単純なステートメントで返す列を指定できます。

EFの場合:

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

このエラーが発生します:

エンティティまたは複合型XXXXXは、LINQtoEntitiesクエリで作成できません。

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

4

4 に答える 4

1

基本的に、理由はわかりませんが、Linqは複合型を作成できません。(申し訳ありませんがc#コード)のような匿名タイプを作成している場合は機能します

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

その後、行くことができます

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

しかし、あなたがやろうとしているような強い型や複雑な型としてそれを構築することはできません

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

また、の使用には注意が必要なsingle場合があります。再生番号を持つ医師がいない場合、または複数の医師がいる場合は例外をスローしますが、singleordefaultより安全ですが、一致するものが複数ある場合は例外をスローします。FirstまたはFirstordefault、はるかに優れたオプションは、存在せず、ほとんど何でも処理できるFirst場合にのみ例外をスローしますFirstordefault

于 2012-04-22T09:37:35.210 に答える
0

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

 Dim who= (From d In contect.Doctors
                     Where d.Regeneration = 3
                     Select d.Actor).Single
于 2012-04-22T09:36:56.763 に答える
0

これを行うための最良の方法は、ViewModelで必要なプロパティを設定することです。「上位レベルを処理している場合はDTO」次に、例として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#でコードを記述しましたが、アイデアは明確だと思います:)

于 2012-04-22T11:49:51.360 に答える
0

これを試して

Dim who = contect.Doctors.SingleOrDefault(Function(d) d.Regeneration = 3).Actor
于 2012-04-22T11:59:47.903 に答える