3
當MesAno是 「」 //string.Empty爲什麼這個可選參數LINQ WHERE不工作?
DateTime dateAux;
int ano = 0;
int mes = 0;
if (MesAno.Trim() != "" && DateTime.TryParse("01/" + MesAno, out dateAux))
{
ano = dateAux.Year;
mes = dateAux.Month;
}
lista = session.Query<Evidencias>().Timeout(30)
.Where(m => m.Produto.Distribuidora.Id == myUser.Terceiro.Distribuidora.Id)
//.Where(m => MesAno != "" ? (m.DataInclusao.Year == ano && m.DataInclusao.Month == mes) : true)
.Where(m => Produto != "" ? m.Produto.CodigoProduto.Contains(Produto) : true)
.Where(m => Titular != "" ? m.NomeTitular.Contains(Titular) : true)
.Where(m => Instalacao != "" ? m.CodigoInstalacao.Contains(Instalacao) : true)
.Where(m => ano != 0 ? m.DataInclusao.Year == ano : true)
.Where(m => mes != 0 ? m.DataInclusao.Month == mes : true)
.OrderByDescending(m => m.DataInclusao).Take(3000).ToList();
然後生成的SQL WHERE是:
where [email protected] and @P3=1 and @P4=1 and @P5=1 and datepart(year, evidencias0_.DataInclusao)[email protected] and datepart(month, evidencias0_.DataInclusao)[email protected] order by evidencias0_.DataInclusao desc',N'@P1 int,@P2 int,@P3 bit,@P4 bit,@P5 bit,@P6 int,@P7 int',3000,1,1,1,1,0,0
陌生人的部分是:
datepart(year, evidencias0_.DataInclusao)[email protected] and datepart(month, evidencias0_.DataInclusao)[email protected]
爲什麼不這樣:
@P6=1 and @P7=1
真棒回覆。簡單,簡單,快速和完美。 將這個課程放在我的項目中的最佳方式是什麼?一個包中包含一個擴展類的文件?或者一個LinqExtension類文件與這個類和其他擴展Linq類? – MarcioAT
歡迎您,很高興它幫助:)關於這個問題,這是一個個人喜好/風格的問題。我通常有一個這樣的類(文件)與許多我自己的擴展,並將其包含(複製)到我需要它的任何項目。再次,這取決於你 - 使用任何適合你當前的編碼習慣:) –