C# LINQ:记录列表比预期的记录多

C# LINQ:记录列表比预期的记录多,c#,sql,linq,C#,Sql,Linq,我有User、UserRoles、Rolelevels和shift表。用户的序列是UserRoles表中的外键,UserRoles的序列是RoleLevel表中的外键,但RoleLevel表将包含RoleLevel序列的多个记录。移位表包含用户序列。现在,我想将班次表数据检索为一个列表,条件是特定班次的用户是否具有经理角色,因此我尝试了以下方法,但它给出的结果是实际结果的两倍。班次表的总记录为19条,但给出了19条以上的记录。我哪里做错了?如何实现这一逻辑 我的Linq查询 private L

我有User、UserRoles、Rolelevels和shift表。用户的序列是UserRoles表中的外键,UserRoles的序列是RoleLevel表中的外键,但RoleLevel表将包含RoleLevel序列的多个记录。移位表包含用户序列。现在,我想将班次表数据检索为一个列表,条件是特定班次的用户是否具有经理角色,因此我尝试了以下方法,但它给出的结果是实际结果的两倍。班次表的总记录为19条,但给出了19条以上的记录。我哪里做错了?如何实现这一逻辑

我的Linq查询

 private List<ShiftsModel> IsApproverTest(List<Shifts> model)
    {
        //model record count is 19

        var Users = _dbContext.Users.Where(x => x.Is_Active == "True").ToList();
        var userroles = _dbContext.UserRoles.Where(x => x.Is_Active == "True").ToList();
        var RoleLevels = _dbContext.RoleLevels.Where(x => x.Is_Active == "Y" && (x.Competencies==1 || x.Competencies==2)).Distinct().ToList();


        var userRoleDetails = (
                               from p in model
                               join u in Users on p.Create_User equals u.UserSeqeunce
                               join ur in userroles on u.UserSeqeunce equals ur.UserSeqeunce
                               join rl in RoleLevels on ur.RoleSeqeunce equals rl.RoleSeqeunce


                               select (new ShiftsModel
                               {
                                   //RoleLevelsList = rl,
                                   Competencies = rl.Competencies,
                                   Shifts_Id = p.Shifts_Id,
                                   Shift_Name = p.Shift_Name,
                                   Shift_Ref_ID = p.Shift_Ref_ID,
                                   Shift_start_Date = p.Shift_start_Date,
                                   Shift_End_Date = p.Shift_End_Date,
                                   Shift_start_Time = p.Shift_start_Time,
                                   Shift_End_Time = p.Shift_End_Time,
                                   Future_Shifts = p.Future_Shifts,
                                   Project_Id = p.Project_Id,
                                   RoleId = p.RoleId == null ? 0 : Convert.ToInt32(p.RoleId),
                                   CPP = p.CPP,
                                   HASP = p.HASP,
                                   TBS = p.TBS,
                                   WPP = p.WPP,
                                   SWP = p.SWP,
                                   Sign_In = p.Sign_In,
                                   Sign_Out = p.Sign_Out,
                                   Status = p.Status,
                                   Remarks = p.Remarks,
                                   Site_Id = p.Site_Id,
                                   Created_Date = p.Created_Date,
                                   modified_Date = p.Modified_Date,
                                   Is_Approved = p.Is_Approved,
                                   Is_Active = (p.Is_Active == "True" || p.Is_Active == "Y") ? true : false
                               })).ToList();

         //userRoleDetailsrecord count is 36 instead of 19 - What's the issue here?
         return userRoleDetails;
    }
private List isapprovest(列表模型)
{
//模型记录计数为19
var Users=\u dbContext.Users.Where(x=>x.Is\u Active==“True”).ToList();
var userroles=\u dbContext.userroles.Where(x=>x.Is\u Active==“True”).ToList();
var RoleLevels=_dbContext.RoleLevels.Where(x=>x.Is_Active==“Y”&(x.capabilities==1 | | x.capabilities==2)).Distinct().ToList();
var userRoleDetails=(
模型中的p
在p.Create_User等于u.usersequence上加入用户
在u.UserSequence上的userroles中加入ur。UserSequence等于ur.UserSequence
将rl加入ur.ROLESEQENCE上的ROLELELEVELS等于rl.ROLESEQENCE
选择(新换档模式
{
//RoleLevel列表=rl,
能力=rl.能力,
班次Id=p.班次Id,
Shift\u Name=p.Shift\u Name,
班次参考号=p.班次参考号,
班次开始日期=p.班次开始日期,
班次结束日期=p.班次结束日期,
班次开始时间=p.班次开始时间,
班次结束时间=p.班次结束时间,
未来_班次=p.未来_班次,
项目Id=项目Id,
RoleId=p.RoleId==null?0:Convert.ToInt32(p.RoleId),
CPP=p.CPP,
搭扣,
TBS=p.TBS,
WPP=p.WPP,
SWP=p.SWP,
Sign_-In=p.Sign_-In,
注销=p.注销,
状态=p.状态,
备注,
站点Id=p.站点Id,
创建日期=p.创建日期,
修改日期=p.修改日期,
是否批准=p是否批准,
是否处于活动状态=(p.Is_Active==“True”| p.Is_Active==“Y”)?True:false
})).ToList();
//userRoleDetailsrecord计数是36而不是19-这里有什么问题?
返回用户角色详细信息;
}

您是否仅在唯一键上加入?可能有多个
userroles
具有相同的
ur.usersequence
属性吗?(还要注意输入错误:sequence)让您的连接一个接一个地进行计数并一步一步地调试。或者删除tolist,从中获取生成的查询并进行调试。或者也选择每个表的Id,并在结果中查找重复项。这些是包含未知信息的未知表,我不知道如何找到丢失的Pk/Fk链接。@Chrᴉz是的,联接条件仅在唯一键上,但RoleLevel表包含多个RoleSequence(相同的序列两次),正如我在问题中提到的。@拖放,下一行为序列提供两条或多条记录,但我想获取这两条记录,需要检查它在列中是否包含1或2个值。“将rl加入ur.ROLESEQENCE上的ROLELELEVELS等于rl.ROLESEQENCE”