私はaspmvc3アプリで作業しています。私は歴史と呼ばれるモデル/エンティティを持っています。 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);
また、メソッドタイプを文字列から履歴に変更すると、「変換できません」というエラーが発生します。
public History GetPastAbuseData(int Id)
{
return (from h in _DB.History
where h.ApplicantId.Equals(Id)
select h.AbuseComment).SingleOrDefault();
}
お時間をいただきありがとうございます。
AbuseComment
からHistoryObject
プロパティ(文字列)を選択しています。したがって、コードは文字列を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();
}
_
最初の例は問題ありません。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;
}
Nullかどうかをチェックし、string.Emptyを返すnull合体演算子を使用できます。 ??演算子
public string GetPastAbuseData(int Id)
{
return _DB.History.FirstOrDefault(h=>h.ApplicantId.Equals(Id)).Select(h=>h.AbuseComment) ?? string.Empty;
}