2012-11-02 7 views
6

私はasp mvc 3 appで作業しています。私は歴史と呼ばれるモデル/エンティティを持っています。私は1つの値を返すlinqクエリを持っています。私が何をするかに応じて、メソッドが呼び出されたときに「インスタンスに設定されていないオブジェクト」エラーが表示されるか、「モデルから文字列へ変換できません」というメッセージが表示されます。だから私は解決の援助を探しています、ただそれをキャストする必要がありますか?ここ LINQ to Entities - エンティティから単一の文字列値を返す方法

'が設定されていないオブジェクトのエラーを与える方法であって

public string GetPastAbuseData(int Id) 
{ 

    var query = (from h in _DB.History 
       where h.ApplicantId.Equals(Id) 
       select h.AbuseComment).FirstOrDefault(); 

    return query.ToString(); 
} 

コントローラー: vm.HistoryModel.AbuseComment = repo.GetPastAbuseData(ID)。

そして、私は、文字列からの歴史にメソッドの種類を変更した場合、私は「変換することはできません」というエラーを取得:

public History GetPastAbuseData(int Id) 
{ 
    return (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h.AbuseComment).SingleOrDefault(); 
} 

はお時間をいただき、ありがとうございます。

答えて

11

HistoryObjectからAbuseCommentプロパティ(文字列)を選択しています。したがって、コードは文字列をHistoryに変換しようとします。ただ、全体Historyエンティティを返す:

public History GetPastAbuseData(int Id) 
{ 
    return (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h).SingleOrDefault(); 
} 

はまた、最初のケースでqueryは、文字列型のものであろう。この変数にToStringを呼び出す必要はありません。さらに、OrDefault()ケースに入ると、NullReferenceExceptionになります。

public string GetPastAbuseData(int Id) 
{ 
    return (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h.AbuseComment).FirstOrDefault(); 
} 
+0

lazyberezovsky、ありがとう。今、あなたが指摘しているように、はっきりしているようです。だから、私はモデル全体を返して、私の見解で必要な駒を取った。ありがとうございました。 – BattlFrog

4

最初の例は、nullをチェックするだけです。

public string GetPastAbuseData(int Id) 
{ 

    var query = (from h in _DB.History 
      where h.ApplicantId.Equals(Id) 
      select h.AbuseComment).FirstOrDefault(); 

    return query == null ? string.empty : query; 
} 
+0

stringは 'null'値を持つことができます。なぜそれを 'String.Empty'に置き換えていますか? –

+0

多くの人々は、文字列であってもnull値を好まない。私は通常その場合に合体します:return query ?? ""; – Dismissile

2

nullの場合はnullをチェックし、nullの場合はstring.Emptyを返します。 ?? Operator

public string GetPastAbuseData(int Id) 
{ 
    return _DB.History.FirstOrDefault(h=>h.ApplicantId.Equals(Id)).Select(h=>h.AbuseComment) ?? string.Empty; 
} 
関連する問題