【问题标题】:Lambda Expression for join用于连接的 Lambda 表达式
【发布时间】:2011-02-18 06:24:43
【问题描述】:
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 的列表 现在对于课程详细信息中存在的课程者,我必须创建 CourseSummary 列表。

我可以做的一件事是为 coursedetail 执行循环,并使用 linq 查询获取相应的参考数据,并创建一个课程摘要对象并将其添加到列表中。

但是有什么方法可以通过一个 linq 查询而不是循环进行

【问题讨论】:

  • 请贴出你目前写的代码。人们通常不喜欢只为您编写代码。事实上,这是一个工作描述,而不是一个问题。
  • 抱歉,由于公司政策,我无法提供代码……但我会尝试用一些不同的示例复制相同的代码并发布。
  • @Radhi:ohhh...请用一些虚拟代码总结您的问题,然后粘贴。
  • 用示例代码更新了帖子...
  • 您需要自己努力编写此内容,然后在需要时寻求帮助。您不能指望其他人从头开始编写您的程序。

标签: c# lambda linq-to-objects


【解决方案1】:

连接的 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 
    });

我通常发现查询语法比用于加入的 lambdas 更具可读性

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

【讨论】:

  • 我希望最终结果为包含与之关联的人员类型列表的人员集合....所以我认为我的情况与您编写的查询不同...否则让我知道是否我错过了什么
  • 你为什么这么说?我认为 Person 有一个 PersonType 属性,它与一个且只有一个 PersonType.TypeID 匹配。如果这是一个数据库模式 PersonType.TypeID 将是 PK。我错过了什么吗?
  • @Radhi 恐怕我不关注。我只是想给你一个非常通用的 Lambdas 加入表格。您将在问题中提供更多详细信息。话虽如此,简短的回答是你可以在任何地方应用你想要过滤掉的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多