lambda多表联合查询

class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
}

class Phone
{
public int UserId { get; set; }
public string PhoneNumber { get; set; }

public Type? Type;
}

class UserDto
{
public string Name { get; set; }
public string Gender { get; set; }
public string PhoneNumber { get; set; }
public string PhoneType { get; set; }

public override string ToString()
{
return string.Format("Name={0},Gender={1},PhoneNumber={2},PhoneType={3}", Name, Gender, PhoneNumber, PhoneType);
}
}

 

enum Type
{
联通=1,
移动=2,
电信=3

}

 

List<User> users = new List<User>() {
new User{Id=1, Name="张三", Gender="男" },
new User{Id=2, Name="李四",Gender="男"},
new User{Id=3, Name="王五",Gender="男" },
new User{Id=4, Name="赵柳",Gender="女" },
new User{Id=5, Name="钱七",Gender="男" }
};
List<Phone> phones = new List<Phone>() {
new Phone{ UserId=1, PhoneNumber="13000000000", Type=Type.电信 },
new Phone{ UserId=2, PhoneNumber="13000000001", Type=Type.联通 },
new Phone{ UserId=3, PhoneNumber="13000000002", Type=Type.移动 },
new Phone{ UserId=4, PhoneNumber="13000000003", Type=Type.电信 },
};

 

//查询用联通手机号的用户的姓名,性别,手机号,电话类型
var userdto = users.Join(phones, t => t.Id, p => p.UserId, (t, p) => new UserDto {
Name = t.Name,
Gender = t.Gender,
PhoneNumber = p.PhoneNumber,
PhoneType = p.Type.ToString()
}).Where(t => t.PhoneType == "联通");

 

 

简单说一下Join,Join的前三个参数分别表示,需要连接的另一个数据集,以及两个表相互关联的属性,我这里明显User下的Id 和Phone下的UserId是对应的,类型一定要是一样的,不然会报编译错误。这里相当于是把两个数据集按照Id和UserId的对应关系放到UserDto中,然后在UserDto中进行查询。

转载: https://blog.csdn.net/u012869793/article/details/104939734

posted @ 2022-05-21 11:16  .net&new  阅读(734)  评论(0编辑  收藏  举报