dom*_*ren 4 .net c# sql linq entity-framework
我正在写一段代码,它将根据评级来排序照片列表.每张照片都存储在DB中,每张照片都有正面和负面投票数等信息.我想通过公式对它们进行排序,其中我计算正面投票的百分比,第一张照片是具有最高百分比的照片.
为此我使用了标准的IComparer接口,并编写了我自己的Comparer功能,它比较了两张照片.问题是,我这样做,我必须首先从数据库下载所有照片的列表.这似乎是我想避免的许多不必要的努力.所以我想知道是否有可能创建我自己的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;
}
}
Run Code Online (Sandbox Code Playgroud)
以及使用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();
Run Code Online (Sandbox Code Playgroud)
删除第一次调用ToList
并使用lambda表达式而不是定义比较器:
var result = db.Pictures
.Include(q => q.Tags)
.Include(q => q.User)
.OrderByDescending(q =>
q.PositiveVotes + q.NegativeVotes == 0
? -1
: q.PositiveVotes / (double)(q.PositiveVotes + q.NegativeVotes))
.Skip(n * 10)
.Take(10)
.ToList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
171 次 |
最近记录: |