我的LinQ代码:
var query = ctx.PERSON.Where(p => p.EMAIL == login && p.PASSWD == pass && p.STATUS == 1)
.Join(ctx.INSTITUTION, p => p.FK_INSTITUTION, inst => inst.ID,(person, institution) => new {person, institution})
.Join(ctx.PERSON_INSTITUTION, p => p.person.ID, perProj => perProj.FK_PERSON, (p, perProj) => new {p, perProj})
//.Join(ctx.PROJECT, p => p.perProj.FK_INSTITUTION, proj => proj.ID, (p, proj) => new {p, proj})
.Join(ctx.PRIVILEGE_ROLE, p => p.perProj.FK_ROLE, privRol => privRol.FK_ROLE,(p, privRol) => new {p, privRol})
.Join(ctx.PRIVILEGE, p => p.privRol.FK_PRIVILEGE, priv => priv.ID, (p, priv) => new {p, priv})
.Where(p => p.priv.NAME == "resource/mul/upload")
.Select(
p =>
new UserModel
{
Login = p.p.p.p.person.EMAIL,
FirstName = p.p.p.p.person.NAME,
LastName = p.p.p.p.person.SURNAME,
UserId = p.p.p.p.person.ID,
InstitutionId = p.p.p.p.institution.ID,
InstitutionName = p.p.p.p.institution.NAME,
OrganizationUnitId = (decimal)p.p.p.p.institution.FK_SWD_ORGANIZATION_UNIT
});
它生成如下的sql:
SELECT
1 AS `C1`,
`Extent1`.`EMAIL`,
`Extent1`.`NAME`,
`Extent1`.`SURNAME`,
`Extent1`.`ID`,
`Extent2`.`ID` AS `ID1`,
`Extent2`.`NAME` AS `NAME1`,
`Extent2`.`FK_SWD_ORGANIZATION_UNIT`
FROM `PERSON` AS `Extent1`
INNER JOIN `INSTITUTION` AS `Extent2` ON `Extent1`.`FK_INSTITUTION` = `Extent2`.`ID`
INNER JOIN `PERSON_INSTITUTION` AS `Extent3` ON `Extent1`.`ID` = `Extent3`.`FK_PERSON`
INNER JOIN `PRIVILEGE_ROLE` AS `Extent4` ON `Extent3`.`FK_ROLE` = `Extent4`.`FK_ROLE`
INNER JOIN `PRIVILEGE` AS `Extent5` ON `Extent4`.`FK_PRIVILEGE` = `Extent5`.`ID`
WHERE (1 = (`Extent1`.`STATUS`)) AND (((`Extent1`.`EMAIL` = @p__linq__0) AND (`Extent1`.`PASSWD` = @p__linq__1)) AND (@gp1 = `Extent5`.`NAME`))
我不确定如何修改我的linq查询以获得这样的sql输出:
SELECT
1 AS `C1`,
`Extent1`.`EMAIL`,
`Extent1`.`NAME`,
`Extent1`.`SURNAME`,
`Extent1`.`ID`,
`Extent2`.`ID` AS `ID1`,
`Extent2`.`NAME` AS `NAME1`,
`Extent2`.`FK_SWD_ORGANIZATION_UNIT`
FROM `PERSON` AS `Extent1`
INNER JOIN `INSTITUTION` AS `Extent2` ON `Extent1`.`FK_INSTITUTION` = `Extent2`.`ID`
INNER JOIN `PERSON_INSTITUTION` AS `Extent3` ON `Extent1`.`ID` = `Extent3`.`FK_PERSON` AND `Extent3`.`STATUS`=1
INNER JOIN `PRIVILEGE_ROLE` AS `Extent4` ON `Extent3`.`FK_ROLE` = `Extent4`.`FK_ROLE`
INNER JOIN `PRIVILEGE` AS `Extent5` ON `Extent4`.`FK_PRIVILEGE` = `Extent5`.`ID`
WHERE (1 = (`Extent1`.`STATUS`)) AND (((`Extent1`.`EMAIL` = @p__linq__0) AND (`Extent1`.`PASSWD` = @p__linq__1)) AND (@gp1 = `Extent5`.`NAME`))
所以我需要在我的加入中添加AND Extent3
。STATUS
= 1。有任何建议如何修改上面的linq查询以获得neede结果?
答案 0 :(得分:4)
您需要添加LINQ所在的位置
.Where(p => p.priv.NAME == "resource/mul/upload")
成为
.Where(p => p.priv.NAME == "resource/mul/upload" && p.perProj.Status ==1)
很难猜到p.perProj,但intellisense可以帮助你。