Lambda表达式用于连接

21
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;} 
    }

对于一个课程系列(courseSer),在RefUIDByCourse中可以有多个RefUID,而对于每个RefUID,在RefData中将会有一条记录。

现在我有CourseDetail、RefUIDByCourse和RefData的列表,现在需要为存在于coursedetail中的课程系列创建CourseSummary列表。

我可以对coursedetail进行循环,并使用linq查询获取相应的refdata,然后创建coursesummary对象并将其添加到列表中。

但是否有一种方法可以通过一个linq查询来完成,而不必进行循环


5
请发布你已经编写的代码。通常人们不喜欢为你编写代码。就目前而言,这是一个工作描述,而不是一个问题。 - Mitch Wheat
抱歉,Mitch,由于公司政策的原因,我无法提供代码...但我会尝试使用一些不同的示例来复制相同的内容并发布。 - Radhi
@Radhi:哦...请用一些虚拟代码总结您的问题,然后粘贴它。 - santosh singh
2
你需要付出一定的努力自己写代码,遇到问题再寻求帮助。你不能期望别人从零开始为你编写程序。 - Adam Rackis
@Radhi:我同意Adam的观点。请花些时间编写查询语句,然后再提问。为这4个类准备数据需要很多时间。 - santosh singh
显示剩余2条评论
1个回答

42

Join 操作的 Lambda 表达式有些复杂 - 这里给出一个简单的例子:

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 
    });

对于连接操作,我通常发现查询语法比使用lambda表达式更易读。

        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 };

我希望最后的结果是一个包含与之关联的人员类型列表的人员集合。所以我觉得我的情况和你写的查询不同...否则请告诉我是否有什么我忽略的地方。 - Radhi
你为什么这么说?我认为Person应该有一个PersonType属性,它与一个且仅一个PersonType.TypeID相对应。如果这是一个数据库模式,PersonType.TypeID将是主键。我有什么遗漏吗? - Adam Rackis
@Radhi,很抱歉我不明白你的意思。我只是试图给你一个关于Lambda表达式的一般连接形式。你在问题中会提供更多细节。话虽如此,简短的回答是你可以在任何地方应用where语句来进行筛选。 - Adam Rackis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接