8

私はasp mvc 3アプリで作業しています。履歴と呼ばれるモデル/エンティティがあります。1 つの値を返す linq クエリがあります。私が何をするかに応じて、メソッドが呼び出されたときにコントローラーで「オブジェクトがインスタンスに設定されていません」というエラーが発生するか、「文字列から型 Models.History に暗黙的に変換できません」というエラーが発生します。だから私は解決するための支援を探しています.私はそれをキャストする必要がありますか?

「オブジェクトが設定されていません」というエラーが発生するメソッドは次のとおりです。

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);

メソッドの型を string から History に変更すると、「変換できません」というエラーが表示されます。

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

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

4

3 に答える 3

13

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

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();
}
于 2012-11-02T18:06:46.247 に答える
5

最初の例は問題ありません。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;
 }
于 2012-11-02T18:24:46.620 に答える
2

null かどうかをチェックし、null の場合は string.Empty を返す null 合体演算子を使用できます。 ?? オペレーター

public string GetPastAbuseData(int Id)
{
     return _DB.History.FirstOrDefault(h=>h.ApplicantId.Equals(Id)).Select(h=>h.AbuseComment) ?? string.Empty;
}
于 2012-11-02T18:49:25.273 に答える