修改Linq代码,添加AND语句以加入

时间:2017-05-18 12:16:24

标签: c# sql linq lambda

我的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 Extent3STATUS = 1。有任何建议如何修改上面的linq查询以获得neede结果?

1 个答案:

答案 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可以帮助你。

相关问题