私は自分の評価に基づいて写真のリストを並べ替えるコードを書いています。各写真はDBに格納されており、それぞれ正および負の投票数などの情報を持っています。私は正の票の割合を数える式で注文したいと思います。最初の写真は最高の割合です。私自身のOrderBy関数
私は標準のIComparerインターフェイスを使用し、2つの写真を比較する独自のComparer関数を書きました。問題は、まずデータベースからすべての写真のリストをダウンロードする必要があるということです。私が避けたいと思う多くの不必要な努力のようです。だからDB側で比較を行う自分のSQL関数を作成することが可能かどうか疑問に思っています。サーバー側のすべての写真を比較するより効率的ですか?
自分自身の比較演算のためのコード:
public class PictureComparer : IComparer<Picture>
{
public int Compare(Picture p1, Picture p2)
{
double firstPictureScore = (((double)p1.PositiveVotes/(double)(p1.PositiveVotes+p1.NegativeVotes))*100);
double secondPictureScore = (((double)p2.PositiveVotes/(double)(p2.PositiveVotes + p2.NegativeVotes)) * 100);
if (firstPictureScore < secondPictureScore) return 1;
if (firstPictureScore > secondPictureScore) return -1;
return 0;
}
}
そしてcomaprerを使用するコード:
var pictures = db.Pictures.Include(q => q.Tags).Include(q => q.User).ToList();
pictures = pictures.OrderBy(q => q, new PictureComparer()).Skip(0 * 10).Take(10).ToList();
あなたの質問への答えを考えた直前に、PictureComparer.Compare()メソッドでは、firstPictureScoreとsecondPictureScoreを計算するときに* 100を忘れることがあります。比較で何も変更されません – PierrOz
必要なレコードのみを返し、EFから呼び出すストアドプロシージャをコード化することができない理由は何ですか? – Oded
あなたは「私が欲しい写真」とはどういう意味ですか?最初のXのもの? – PierrOz