请参阅此代码
public class MedierService : Singleton<MedierService>
{
PresseEntities _db = new PresseEntities();
IQueryable<Medier> _mediers;
public MedierService()
{
_mediers = _db.Mediers.Select(s => s);
}
public List<Medier> GetAll(MedierStatus m)
{
var retVal = Enumerable.Empty<Medier>();
switch (m)
{
case MedierStatus.New:
retVal = _mediers.Where(w => w.vis == 1 && w.dato_slettet == new DateTime(1900, 01, 01));
break;
case MedierStatus.Deleted:
retVal = _mediers.Where(w => w.vis == 1 && w.dato_slettet != new DateTime(1900, 01, 01));
break;
}
return retVal.ToList();
}
}
VS
public class MedierService : Singleton<MedierService>
{
PresseEntities _db = new PresseEntities();
IQueryable<Medier> _GetAll()
{
return _db.Mediers.Select(s => s);
}
public List<Medier> GetAll(MedierStatus m)
{
var retVal = Enumerable.Empty<Medier>();
switch (m)
{
case MedierStatus.New:
retVal = _GetAll().Where(w => w.vis == 1 && w.dato_slettet == new DateTime(1900, 01, 01));
break;
case MedierStatus.Deleted:
retVal = _GetAll().Where(w => w.vis == 1 && w.dato_slettet != new DateTime(1900, 01, 01));
break;
}
return retVal.ToList();
}
}
好吧,所以上面的代码在调用MedierService.Instance.GetAll(MedierStatus.New)
后都会返回相同的结果。
我对C#完全陌生,我希望我的代码有意义。
我在这里要做的是集中_mediers
和_GetAll
,这样如果过滤器是全局的,我可以轻松过滤结果,所以我不必逐行并把过滤器。
现在我的问题是
我不知道我是否正确行事,在我的第一个例子中,我是通过使用构造函数创建并创建了一个变量_mediers
,但是在第二个例子中我创建了一个名为{{1}的私有方法}。
所以这是我的问题: 1.)正确的做法是什么?第一个或下一个?
2。)是否可以使_GetAll()
和_mediers
IQueryable,以便它不会加载我的数据库中的所有数据并让我的方法过滤它?
3.。)可以在下划线前加上我的方法_GetAll()
,因为它是私有方法吗?
4。)无论如何你可以增强我的代码吗?
您的所有答案将极大地帮助我并提高我的编码技能。 非常感谢
答案 0 :(得分:1)
只需要一个GetAll方法(即删除_GetAll方法,不需要构造函数)
public List<Medier> GetAll(MedierStatus m)
{
var date = new DateTime(1900, 01, 01);
var retVal = _db.Mediers
.Where(w => w.vis == 1 &&
((w.dato_slettet == date && m == MedierStatus.New)
|| (w.dato_slettet != date && m == MedierStatus.Deleted)));
return retVal.ToList();
}
至于指示私有方法的前缀,而是明确使用私有访问修饰符。
private IQueryable<Medier> GetAll() {...}