Filtre LinqtoSQL et ordre par syntaxe
-
03-07-2019 - |
Question
Mon technicien Bretheren (et Sisteren, bien sûr!),
J'ai un modèle de données LinqToSql qui comporte les entités suivantes: modèle de données http://danimal.acsysinteractive.com/images/advisor.jpg
Je dois récupérer tous les conseillers d'un bureau spécifique, classés par ordre chronologique au sein du bureau. La première partie fonctionne avec une jointure:
public static List<Advisor>GetOfficeEmployees(int OfficeID)
{
List<Advisor> lstAdvisors = null;
using (AdvisorDataModelDataContext _context = new AdvisorDataModelDataContext())
{
var advisors = from adv in _context.Advisors
join advisoroffice in _context.OfficeAdvisors
on adv.AdvisorId equals advisoroffice.AdvisorId
where advisoroffice.OfficeId == OfficeID
select adv;
lstAdvisors = advisors.ToList();
}
return lstAdvisors;
}
Cependant, je n'arrive pas à envelopper mon cerveau fatigué autour de la clause d'ordre par. Quelqu'un peut-il donner des suggestions?
La solution
from adv in _context.Advisors
where adv.OfficeAdvisor.Any(off => off.OfficeId == officeID)
order adv by adv.OfficeAdvisor.First(off => off.OfficeId = officeID).Sequence
select adv;
Autres conseils
public static List<Advisor>GetOfficeEmployees(int OfficeID)
{
List<Advisor> lstAdvisors = null;
using (AdvisorDataModelDataContext _context = new AdvisorDataModelDataContext())
{
var advisors = from adv in _context.Advisors
join advisoroffice in _context.OfficeAdvisors
on adv.AdvisorId equals advisoroffice.AdvisorId
where advisoroffice.OfficeId == OfficeID
group adv by adv.OfficeId into g
order by g.Sequence
select g;
lstAdvisors = advisors.ToList();
}
return lstAdvisors;
}
Remarque: je ne suis pas en mesure de le tester actuellement sur Visual Studio, mais cela devrait fonctionner.
Vous pouvez ajouter une clause order by comme ceci:
var advisors = from adv in _context.Advisors
join advisoroffice in _context.OfficeAdvisors
on adv.AdvisorId equals advisoroffice.AdvisorId
where advisoroffice.OfficeId == OfficeID
orderby advisoroffice.Sequence // < -----
select adv;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow