如何使用c# *Lambda*连接3个对象并返回t1.*和t2和t3中选定的颜色

本文关键字:t3 t2 颜色 t1 返回 Lambda 何使用 连接 3个 对象 | 更新日期: 2023-09-27 18:15:41

请只用c# Lambda。No Linq - 查询样式.

寻找如何连接3个对象的策略,这些对象将输出如下SQL (c# lambda的最终目标):

SELECT t1.*, t2.name pet_name, t3.name teacher_name
FROM user_profile t1
    INNER JOIN pet_profile t2 on t1.pet_id = t2.pet_id
    INNER JOIN pet_teacher t3 on t1.pet_teacher_id = t3.pet_teacher_id

user_profile 列:

  1. user_id
  2. user_fullname
  3. pet_id
  4. pet_teacher_id

pet_profile 列:

  1. pet_id
  2. <
  3. 名称/gh>

pet_teacher 列:

  1. pet_teacher_id
  2. <
  3. 名称/gh>

我现在用这个查询连接了两个对象:

IQueryable<UserProfile> query = dataContext.UserProfile;
var queryTest = query
    .Join(dataContext.PetProfile,
        UserProfile => UserProfile.pet_id,
        t2 => t2.pet_id,
        (UserProfile, t2) => new { UserProfile, PetName = t2.name });

生成如下SQL:

SELECT UserProfile.user_id,
    UserProfile.user_fullname,
    UserProfile.pet_id,
    UserProfile.pet_teacher_id,
    t2.name PetName
FROM user_profile UserProfile
    INNER JOIN pet_profile t2 on UserProfile.pet_id = t2.pet_id

[Q1:]如何加入第三个表pet_teacher

[Q2:]如何拥有user_profile的所有字段而无需手动执行:

var UserAndPet = query.Select(o => 
        new { o.UserProfile.user_id, 
            o.UserProfile.user_fullname,
            o.UserProfile.pet_id, 
            o.UserProfile.pet_teacher_id, 
            o.UserProfile.PetName, 
            o.UserProfile.TeacherName  }
    ).ToList();
enter code here

如何使用c# *Lambda*连接3个对象并返回t1.*和t2和t3中选定的颜色

第三张表

var queryTest = query
    .Join(dataContext.PetProfile,
        UserProfile => UserProfile.pet_id,
        t2 => t2.pet_id,
        (UserProfile, t2) => new { UserProfile, PetName = t2.name })
    .Join(datacontext.PetTeacher,
          x=>x.UserProfile.pet_teacher_id,
          y=>y.pet_teacher_id,(x,y)=>new {x.UserProfile,x.petname,x.teacherName})

对于第二个问题,如果所有列都来自同一个表

,则可以这样做
var UserAndPet = query.Select(o =>o).ToList();