我需要一些适用于我的项目的样例代码。我正在使用EF CORE 2.1.1。
我创建了一个函数,它接受3个参数,在该函数内我执行了一个LINQ( lambda表达式查询),然后返回一个列表。
这是我的函数:
public IEnumerable<Donneesource> GetAllSourcesFromBDD(DateTime PremierDateCom, DateTime DerniereDateCom, string Secteur)
{
try
{
//Récupération des données.
IEnumerable<Donneesource> RawDatas = _sourceDAL.Donneesource
.Where(ic => ic.EstCopieDestination == false)
.Where(s => PremierDateCom != DateTime.MinValue && s.SComPremierDate.Value.Date == PremierDateCom.Date)
.Where(s => DerniereDateCom != DateTime.MinValue && s.SComDerniereDate.Value.Date == DerniereDateCom.Date)
.Where(s => Secteur != string.Empty && s.SSectNom == Secteur)
.ToList();
return RawDatas;
}
catch(Exception)
{
return null;
}
}
默认情况下,我将DateTime参数设置为DateTime.MinValue(PremierDateCom,DerniereDateCom),将字符串参数设置为string.Empty(Secteur)。
我正在尝试创建一个带有where子句的单个查询。如果使用默认参数,则希望忽略where子句。例如,如果PremierDateCom = DateTime.MinValue(或其他参数),则希望在查询中忽略where子句,如果需要包含where子句,则应该在查询中添加。
我不想创建这样的查询:
//Filtre
if (PremierDateCom != DateTime.MinValue)
RawDatas = RawDatas.Where(x => x.SComPremierDate.Value.ToShortDateString() == PremierDateCom.ToShortDateString());
//Filtre
if (DerniereDateCom != DateTime.MinValue)
RawDatas = RawDatas.Where(x => x.SComDerniereDate.Value.ToShortDateString() == DerniereDateCom.ToShortDateString());
//Filtre
if (Secteur != null)
RawDatas = RawDatas.Where(x => x.SSectNom == Secteur);
IQueryable
以及它的工作原理。假设_sourceDAL.Donneesource
返回一个IQueryable
,那么它不会效率低下。 - DavidG