2017-07-27 7 views
0

プロパティ( 'Key'と 'Value')をフロントエンドからバックエンドサービスに渡しています。 )は、特定のSQL Serverデータベーステーブルの特定の列(obj.key)に格納され、オブジェクトに変換されたすべての一致する行の一覧を返します。テーブルの列に値が含まれていてオブジェクトのリストが返されている場合のLINQルックアップ

しかし、このコードはすべての場合に機能しません。ほとんどの場合、「オブジェクトのインスタンスに設定されていないオブジェクト」エラーが返されます。

agencies = _unitOfWork.RatingAgencyRepository.GetByType(p => p.GetType().GetProperty(filter.key) 
      .GetValue(p, null).ToString().ToLower().Contains(filter.value.ToLower().Trim())).ToList(); 

私はLINQとEFと本当に慣れていないんだので、任意の結果なしで一日のために同僚によって書かれたこのコードを修正しようとしてきました。

ありがとうございます。

+1

RatingAgencyRepository.GetByTypeメソッドについて詳しく知りません。いずれにせよ、それはかなり醜い声明です。リポジトリクラスを変更するアクセス権があれば、単にフィルタオブジェクトをパラメータとして受け取り、それを使ってそのフィルタプロパティとフィルタ値を持つオブジェクトのリストを取得し、それをキャストしたり変換したりするメソッドの作成をお勧めします必要なオブジェクトの種類。 結論は、コードを読みやすく保守したいということです。この線は私にとって非常に明確で直感的ではありません。 – Torrents

+0

これはgetByTypeメソッドによって、背後にあるコードである: '公共のIEnumerable GetByType(機能) {リターンDbSet.Where()(を.ToList)。 } ' – spectre85

+0

サンプルコードで2つの引数を渡しており、その定義には1つしかかからないため、同じであってはなりません。 – NetMage

答えて

0

次のいずれかがnullです。おそらく1つ以上。あなたの式は本当にハードにあるので名前filter.key

  • filter.value
  • によって表されるオブジェクトのいずれかのプロパティの

    1. フィルタ
    2. filter.key
    3. 値視覚的に解析し、実行時の例外の場合にはさらにデバッグするのが難しくなりました。私の提案は、フィルタをより正気なものにリファクタリングすることです。

      var prop = typeof(RatingAgency).GetProperty(filter.key); 
      var value = filter.value.Trim().ToLower(); 
      _unitOfWork.RatingAgencyRepository.GetByType(p => prop 
            .GetValue(p, null).ToString().ToLower().Contains(value)).ToList() 
      
    関連する問題