16、EF操作_多表联查lambda和linq
单表
sql
List<UserInfo> userList=fHZMEntities.Database.SqlQuery<UserInfo>("select * from UserInfo").ToList();
Linq
List<UserInfo> userList = (from a in fHZMEntities.UserInfo
where (string.IsNullOrEmpty(userinfo.UserName) || a.UserName == userinfo.UserName)
select a).ToList();
Lambda
List<UserInfo> userList = fHZMEntities.UserInfo.Where(a => (string.IsNullOrEmpty(userinfo.UserName) || a.UserName == userinfo.UserName)
&& (string.IsNullOrEmpty(userinfo.Number) || a.Number == userinfo.Number)
).ToList();
两表join
sql
List<UserParentViewModel> UserParentViewModelList = fHZMEntities.Database.SqlQuery<UserParentViewModel>("select *from UserInfo join UserParent on UserInfo.UserParent =UserParent.id").ToList();
Linq
var jointemp = from a in fHZMEntities.UserInfo
join b in fHZMEntities.UserParent on a.UserParent equals b.id
select new
{
a.Id,
a.UserName,
b.FatherName
};
Lambda
第一个参数:你要join的表
第二,三个参数:join连接条件
第四个参数:返回的结果
var UserParentViewModelList = fHZMEntities.UserInfo.Join(fHZMEntities.UserParent, a => a.UserParent, b => b.id, (a, b) => new
{
a.Id,
a.UserName,
b.FatherName
}).ToList();
两表leftjoin
Linq
var jointemp = from a in fHZMEntities.UserInfo
join p in fHZMEntities.UserParent on a.UserParentId equals p.id into leftjointemp
from leftjon in leftjointemp.DefaultIfEmpty()
select new
{
a.Id,
a.UserName,
leftjon.FatherName
};
var result = jointemp.ToList();
Lambda
//GroupJoin一对多
var jointemp = fHZMEntities.UserInfo.GroupJoin(fHZMEntities.UserParent, a => a.UserParentId, b => b.id, (user, parent) => new
{
user = user,
Father = parent
}).SelectMany(a => a.Father.DefaultIfEmpty(), (last, parent) => new UserParentViewModel
{
Id = last.user.Id,
UserName = last.user.UserName,
FatherName = parent.FatherName
});
//SelectMany一对一
三表join
Linq
//var jointemp = from u in fHZMEntities.UserInfo
// join p in fHZMEntities.UserParent on u.UserParentId equals p.id
// join s in fHZMEntities.Score on u.Id equals s.UserId
// select new
// {
// u.Id,
// u.UserName,
// p.FatherName,
// s.sub,
// s.userScore
// };
//var result = jointemp.ToList();
Lambda
var jointemp = fHZMEntities1.UserInfo.Join(fHZMEntities1.UserParent, a => a.UserParentId, b => b.id, (a, b) => new
{
a.Id,
a.UserName,
a.Number,
a.UClass,
b.FatherName
}).Join(fHZMEntities1.Score, a => a.Id, b => b.UserId, (a, b) => new
{
a.Id,
a.UserName,
a.Number,
a.UClass,
b.sub,
b.userScore,
a.FatherName
});
var result = jointemp.ToList();
三表leftjoin
Linq
var list = from u in fHZMEntities1.UserInfo
join p in fHZMEntities1.UserParent on u.UserParentId equals p.id into leftjointemp
from leftjointemp2 in leftjointemp.DefaultIfEmpty()
join s in fHZMEntities1.Score on u.Id equals s.UserId into scoretemp
from leftscore in scoretemp.DefaultIfEmpty()
select new
{
u.Id,
u.UserName,
u.Number,
u.UClass,
leftscore.sub,
leftscore.userScore,
leftjointemp2.FatherName
};
var result = list.ToList();
Lambda
var result = fHZMEntities1.UserInfo.GroupJoin(fHZMEntities1.UserParent, a => a.UserParentId, b => b.id, (a, b) => new
{
a.Id,
a.UserName,
a.Number,
a.UClass,
UserParent = b
}).GroupJoin(fHZMEntities1.Score, a => a.Id, b => b.UserId, (a, b) => new
{
a.Id,
a.UserName,
a.Number,
a.UClass,
a.UserParent,
Score = b
}).SelectMany(a => a.UserParent.DefaultIfEmpty(), (m, n) => new
{
m.Id,
m.UserName,
m.Number,
m.UClass,
m.Score,
n.FatherName
}).SelectMany(a => a.Score.DefaultIfEmpty(), (m, n) => new
{
m.Id,
m.UserName,
m.Number,
m.UClass,
n.sub,
n.userScore,
m.FatherName,
});
var list = result.ToList();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构