2016-10-09 1 views
3

J'ai besoin d'obtenir le nombre de jours entre deux dates de la base de données en utilisant Linq Query, aidez-moi s'il vous plaît comment faire cela. merciComment obtenir le nombre de jours entre deux dates dans asp.net MVC en utilisant Linq

J'ai essayé le code ci-dessous mais il me renvoie le résultat nul! Aidez-nous

DateTime rightNow = DateTime.Now; 

     //int totalDays = (from d in db.vuExpiredProjectsAssigned 
     //     where d.AssignedTo==obj.DepartmentID 
     //     select (d.AssignedDate - d.DueDate).Days).FirstOrDefault(); 

     //var numberdays = (from pd in db.vuExpiredProjectsAssigned 
     //     where pd.AssignedTo == obj.DepartmentID 
     //     select SqlFunctions.DateDiff("day", pd.AssignedDate, rightNow)); 

     var result =(from dd in db.vuExpiredProjectsAssigned 
        where dd.AssignedTo==obj.DepartmentID 
        select new 
        { 
         days=SqlFunctions.DateDiff("Day",dd.DueDate,rightNow) 
        }); 

     ViewBag.ndays = result; 
+3

'var jours = (DueDate - AssigneDate) .Days;' –

+0

l'erreur est "Les arguments DbArithmeticExpression doivent avoir un type commun numérique." – ZKF3340320

+1

Matérialiser la requête d'abord –

Répondre

1

L'arithmétique avec DateTime n'est pas prise en charge dans Entity Framework. Vous devez utiliser DbFunctions *. Ainsi, pour la première partie de votre déclaration, quelque chose comme:

var numberdays = (from p in db.vuExpiredProjectsAssigned 
        where p.AssignedTo == obj.DepartmentID 
        select DbFunctions.DiffDays(p.AssignedDate,p.DueDate)); 

OU

var numberdays = (from p in db.vuExpiredProjectsAssigned 
        where p.AssignedTo == obj.DepartmentID 
        select SqlFunctions.DateDiff("day", p.AssignedDate, p.DueDate)); 

Pour plus référence s'il vous plaît vérifier ci-dessous des liens.

SqlFunctions Class

DbFunctions Class

+0

il retourne une erreur "Aucune surcharge pour la méthode 'diffDays' prend 1 arguments" ?? – ZKF3340320

+0

qu'est-ce qu'il retaille? je stocke le résultat dans ViewBag il m'imprime la requête elle-même – ZKF3340320

+0

il devrait renvoyer tableau int. Pourriez-vous s'il vous plaît mettre le point de rupture et vérifier cela? –

0

essayer avec cette

DbFunctions.DiffDays(dd.DueDate,rightNow).Value 

Mise à jour

var rightNow= DateTime.Today.ToShortDateString(); 

public class democlass 
{ 
public int count {get; set;} 
} 

et requête comme ceci

var result =(from dd in db.vuExpiredProjectsAssigned 
       where dd.AssignedTo==obj.DepartmentID 
       select new democlass() 
       { 
        count = DbFunctions.DiffDays(dd.DueDate,rightNow).Value 
       }); 

puis vérifiez votre variable de résultat.

+0

var résultat = (à partir de dd dans db.vuExpiredProjectsAssigned où dd.AssignedTo == obj.DepartmentID sélectionnez DbFunctions.DiffDays (dd.AssignedDate, dd.DueDate) .Value); ViewBag.ndays = résultat; – ZKF3340320

+0

toujours le résultat est null – ZKF3340320

+0

jours est un champ anonyme? –

0

Tant que vous n'utilisez pas la différence de jours dans le où clasuse, il est préférable de faire ce calcul dans votre code au lieu d'ajouter les frais généraux à SQL, donc changer votre code:

public class democlass 
{ 
public DateTime DueDate{get;set;} 
public int count {get; set;} 
} 

var result =((from dd in db.vuExpiredProjectsAssigned 
      where dd.AssignedTo==obj.DepartmentID 
      select new democlass() 
      { 
       DueDate= dd.DueDate; 
      })).ToList(); 

result.ForEach(a=> {a.count = a.DueDate.Subtract(DateTime.Now).TotalDays});