Ich mag würde mit LINQ eine Mitarbeiterliste zu erhalten, müssen diese Mitarbeiter die typeofWork
bestand in der TypeOfWorks
Liste haben (Id
) in ArgumenteExists Abfrage mit LINQ
public class Employee
{
public virtual IList<EmployeeTypeOfWork> TypeOfWorks { get; set; }
}
public class EmployeeTypeOfWork
{
public virtual Guid Id { get; set; }
public virtual Employee Employee { get; set; }
public virtual TypeOfWork TypeOfWork { get; set; }
}
public class TypeOfWork
{
public virtual Guid Id { get; set; }
}
public IList<Employee> ListWithTypeOfWork(IList<Employee> Employees,
Guid typeOfWorkId)
{
?????
}
ich das versucht, aber ich vermisste etwas, das ich denken
var res = from p in Employees
where (from pp in p.TypeOfWorks
where pp.TypeOfWork.Id == guid select pp.Id).Contains(p.Id)
select p;
Danke Blesh. Die Übereinstimmung 100% mit meiner Frage könnte Sie die WHERE-Klausel zu diesem korrigieren: where emp.TypeOfWorks.FirstOrDefault (x => x! = Null && x.TypeOfWork.Id == guid)! = Null –
Nur für Informationen, wenn ich Fragen Sie Linq Code, warum jeder mit Lambda-Ausdruck antworten, gibt es einen bestimmten Grund? –
@ Kris-l: FirstOrDefault (Func <>) und Any (Func <>) sind ziemlich genau die gleiche Methode aufrufen, können Sie in Reflector überprüfen. Der einzige Unterschied ist, dass FirstOrDefault (Func <>) ein Objekt zurückgibt, und Any (Func <>) gibt einfach ein Bool zurück. Wenn Sie nur eine Liste von Referenztypen testen, ist die Rückgabe des bool etwas effizienter. Wenn Sie eine Liste von Werttypen testen, ist das nicht unbedingt von Bedeutung, aber wahrscheinlich ist es noch ein wenig effizienter, ein Bool zurückzugeben. –