如何删除此方法中的重复代码
本文关键字:代码 此方法 何删除 删除 | 更新日期: 2023-09-27 18:15:05
private static Game[] getMostPlayedGamesDo(int Fetch, int CategoryID)
{
Game[] r;
using (MainContext db = new MainContext())
{
if (CategoryID == 0)
{
var q = db.tblArcadeGames.OrderByDescending(c => c.Plays).Take(Fetch);
r = new Game[q.Count()];
int i = 0;
foreach (var g in q)
{
r[i] = new Game(g);
i++;
}
}
else
{
var q = db.tblArcadeGames.Where(c=>c.CategoryID == CategoryID).OrderByDescending(c => c.Plays).Take(Fetch);
r = new Game[q.Count()];
int i = 0;
foreach (var g in q)
{
r[i] = new Game(g);
i++;
}
}
}
return r;
}
我似乎无法在if
范围之外定义q
,并且我无法将返回的值插入到 if 范围之外的数组中! 不确定如何删除此简单实例中的重复代码?
目前尚不清楚q
的类型是什么 - 但从您的使用情况推断:
db.tblArcadeGames.OrderByDescending(...)
据推测,它是Linq-To-Sql或Entity Framework中的实体类。 在这种情况下,您确实定义了一个名为 tblArcadeGame
的具体实体。 因此,不使用q
移出范围var
:
IQueryable<tblArcadeGame> q;
if (CategoryID == 0)
{
q = db.tblArcadeGames.OrderByDescending(c => c.Plays).Take(Fetch);
}
else
{
q = db.tblArcadeGames.Where(c=>c.CategoryID == CategoryID).OrderByDescending(c => c.Plays).Take(Fetch);
}
r = new Game[q.Count()];
int i = 0;
foreach (var g in q)
{
r[i] = new Game(g);
i++;
}
如您所见,重复的代码现在只看到一次。
附言像ReSharper这样的工具非常适合这类事情。 使用它,只需一次击键,您就可以在var
版本和使用显式命名类型的版本之间切换。
你实际上应该显式键入 q。但这可能会让你在没有它的情况下逃脱(三元运算符将为你强制执行(。
var q = CategoryID == 0 ? db.tblArcadeGames.OrderByDescending(c => c.Plays).Take(Fetch)
: db.tblArcadeGames.Where(c=>c.CategoryID == CategoryID).OrderByDescending(c => c.Plays).Take(Fetch);
r = new Game[q.Count()];
int i = 0;
foreach (var g in q)
{
r[i] = new Game(g);
i++;
}
我假设q是IQueryable类型。
private static Game[] getMostPlayedGamesDo(int Fetch, int CategoryID)
{
var q = db.tblArcadeGames;
if (CategoryID != 0)
{
q = q.Where(c => c.CategoryID == CategoryID);
}
q = q.OrderByDescending(c => c.Plays).Take(Fetch);
return q.Select(g => new Game(g)).ToArray();
}
List<tblArcadeGame> q;
/* object q; */
if (CategoryID == 0)
{
q = db.tblArcadeGames.OrderByDescending(c => c.Plays).Take(Fetch).ToList();
}
else
{
q = db.tblArcadeGames.Where(c=>c.CategoryID == CategoryID).OrderByDescending(c => c.Plays).Take(Fetch).ToList();
}
r = new Game[q.Count()];
int i = 0;
foreach (var g in q)
{
r[i] = new Game(g);
i++;
}
我假设q
是List<tblArcadeGame>