LinqToSQL filtro e da ordem pela sintaxe
-
03-07-2019 - |
Pergunta
Meu Techie bretheren (e Sisteren, é claro!),
Eu tenho um modelo de dados LinqToSql que tem as seguintes entidades: modelo de dados http://danimal.acsysinteractive.com/images/advisor.jpg
Eu preciso recuperar todos os conselheiros para um escritório específico, ordenadas pela respectiva sequência dentro do escritório. Eu tenho a primeira parte trabalhando com uma junção:
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;
}
No entanto, eu não consigo quebrar meu cérebro cansado em torno do fim da cláusula. Alguém pode dar algumas sugestões?
Solução
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;
Outras dicas
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;
}
Nota: Eu não sou capaz de testar atualmente esta no Visual Studio, mas deve funcionar
.Você pode adicionar uma cláusula ORDER BY como este:
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;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow