10

私はこれまでにこのエラーを見たことがなく、非常に紛らわしいです。基本的に、渡された場所名とタイプに一致するすべての場所 (1 つだけを返す) を見つけると言うことをしようとしています:

string name = columns[40];
Location type = db.Locations.Where(l => l.name == name).FirstOrDefault();
Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();

おそらく、私がやりたいことを一挙に行うためのより良い方法がありますが、基本的には列から名前を取得し (これは csv ファイルから取得します)、その場所の情報を取得します。この後、ジャズがすべて揃ったので、この名前とタイプの場所を取得してください。

しかし、私はエラーが発生します:

非静的メソッドにはターゲットが必要です

このコードが実行される最上位のメソッドは次のとおりです。

static void Main(string[] args){}

基本的には単なるコンソールアプリです。どうしたの?

  • dbはコンテキスト クラスです。これは明らかです。
  • はcsvファイルからデータを取得することです。この場合、列[40]は「ニューヨーク」のようなものになります

スタック トレースからの完全なエラー メッセージ: {"非静的メソッドにはターゲットが必要です。"}

注:「可能な回答」として投稿された質問は、このコードを実行している主な方法が静的であるため、この場合には役に立ちません。

さらに調査したところ、名前とタイプが null であることが判明したため、次の修正を行いました。

if (name != null)
{
    Location type = db.Locations.Where(l => l.name == name).FirstOrDefault();
    Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();
    locationNearbyId = loc.id;

    // More code
}

残念ながら、私はまだエラーが発生します:Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();

4

3 に答える 3

23

今日はこんなことがありました。見つけに来てください、私はこれをしていました:

Player player = db.Players
    .Where(p => p.ClubID == course.Club.ID && p.IsActive == true && p.Phone != null)
    .ToArray()
    .SingleOrDefault(p => p.Phone.FormatPhoneNumber() == phone);

course.Club私のデータベースからEFを介して遅延ロードされていた場所。最初は、私の問題はFormatPhoneNumber拡張機能だと思っていましたが、削除すると問題がcourse.Club.ID修正されることがわかりました。

int clubID = course.Club.ID;
Player player = db.Players
    .Where(p => p.ClubID == clubID && p.IsActive == true && p.Phone != null)
    .ToArray()
    .SingleOrDefault(p => p.Phone.FormatPhoneNumber() == phone);

そのため、後続の LINQ クエリで遅延読み込みオブジェクトから収集された値を使用しないでください。それらをローカル変数に割り当ててから、それらの変数をクエリで使用してください。

于 2013-10-15T17:55:45.957 に答える
4

name と type は null になる可能性があるため、if ステートメントの外側に type を設定する必要があるため、続行する前に type と name が null かどうかを確認する必要があります。

name = collumns[40];
type = db.Locations.Where(l => l.name == name).FirstOrDefault();

if (name != null && type != null)
{
    Location loc = db.Locations.Where(l => l.name == name && l.type == type.type).FirstOrDefault();

    //More code....
}
于 2013-05-15T17:19:20.630 に答える