EF操作_多表联查lamdba和linq
单表
sql
List
Linq
List userList = (from a in fHZMEntities.UserInfo
where (string.IsNullOrEmpty(userinfo.UserName) || a.UserName == userinfo.UserName)
select a).ToList();
Lamdba
List 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
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
};
Lamdba
第一个参数:你要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();
Lamdba
//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();
Lamdba
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();
Lamdba
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();