如何使用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 列:
- user_id
- user_fullname
- pet_id
- pet_teacher_id
pet_profile 列:
- pet_id <
- 名称/gh>
pet_teacher 列:
- pet_teacher_id <
- 名称/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
第三张表
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();