0

別のレストランとレビュー テーブルを持つレストラン レビュー アプリケーションがあります。レストランの ID に基づいて Restaurant オブジェクトを渡すメソッドを持つ MVC WebAPI を作成しました。

返されたオブジェクトの一部として、Reviews テーブルに入力された評価値の合計をレストラン ID に入力されたレビューの合計数で割った平均評価値を追加したいと思います。

値が小数点以下 1 桁の形式であると便利です。

次のコードを使用して、Reviews テーブルから平均値 (小数点以下の桁数なし) を取得できます。

var sum = (from a in db.Reviews
           where a.ReviewsRestaurantID.Equals(id)
           select a.ReviewsRating).Sum();

var count = (from a in db.Reviews
             where a.ReviewsRestaurantID.Equals(id)
             select a.ReviewsRating).Count();

decimal average = sum / count;

ID メソッドでレストランを返すために使用するクエリに値を追加する方法がわかりません (pls は以下を参照してください)。カスタム平均評価値を以下の方法に追加するのを手伝ってもらえますか、またはレビューテーブルに結合して値をより効率的に計算する方法はありますか?

public IQueryable<Restaurant> GetRestaurantByID(int id)
{ 
  var query = from a in db.Restaurants
              where a.RestaurantID.Equals(id)
              select a;

  return query; 
}
4

3 に答える 3

3

まず、コードとサーバーへのトラフィックを大幅に削減できます。テーブル、行、およびデータベースについて言及したので、SQLサーバーに行くと思います。

関心のあるすべてのものをサーバーから取得することから始めます。つまり、

var reviews = (from x in db.Reviews where a.ReviewsRestaurantID.Equals(id) select x).ToList();

これで、関心のあるデータを収集するためにサーバーに 2 回別々にアクセスする必要がなくなりました。現在メモリにあるデータに対してクエリを実行して「平均化」することができます...

// Assuming, from your sample that the ratings are stored as decimals....
// This will do the counting, summing, dividing, etc.
decimal avg = (from x in reviews select x.Rating).Average();
于 2013-08-01T00:24:07.073 に答える