web-dev-qa-db-fra.com

Expression Lambda pour la jointure

public class CourseDetail
    {
        public CourseDetail();
        public string CourseId { get; set; }
        public string CourseDescription { get; set; }
        public long CourseSer { get; set; }
    }

 public class RefUIDByCourse
    {
        public long CourseSer {  get;  set; }
        public double DeliveredDose{ get; set; }
        public double PlannedDose{ get; set; }
        public string RefUID {  get;  set; }
     }
 public class RefData
    {
       public double DailyDoseLimit {  get;  set; }
       public string RefName {  get;  set; }
       public string RefUID {  get;  set; }
       public double SessionDoseLimit {  get;  set; }
    }

public class CourseSummary  
    {    
          public long CourseSer { get; set; } 
          public double DeliveredDose{ get; set; } 
          public double PlannedDose{ get; set; } 
          Public List<RefData> lstRefData {get;set;} 
    }

Pour un coursSer, il peut y avoir plusieurs RefUID dans RefUIDByCourse et pour chaque RefUID, il y aura un enregistrement dans RefData

j'ai une liste de CourseDetail, RefUIDByCourse et RefData maintenant pour le coursier existe dans coursedetail je dois créer une liste de CourseSummary.

une chose que je peux faire est de faire une boucle pour coursedetail et de récupérer les refdata respectives à l'aide de la requête linq et de créer un objet de résumé du cours et de l'ajouter dans la liste.

mais existe-t-il un moyen de le faire par une requête linq au lieu de faire une boucle

20
Radhi

Le lambda pour une jointure est un peu impliqué - voici un exemple simple:

List<Person> People = new List<Person>();
List<PersonType> PeopleTypes = new List<PersonType>();

var joined = People.Join(PeopleTypes, 
  PeopleKey => PeopleKey.PersonType, 
  PeopleTypesKey => PeopleTypesKey.TypeID, 
  (Person, PersoneType) => new 
    { 
      Name = Person.Name, 
      TypeID = PersoneType.TypeID 
    });

Je trouve généralement la syntaxe de requête beaucoup plus lisible que les lambdas pour rejoindre

        var joined2 = from p in People
                      join pType in PeopleTypes
                      on p.PersonType equals pType.TypeID
                      where p.Name.StartsWith("whatever")
                      select new { Name = p.Name, TypeID = pType.TypeID };
37
Adam Rackis