C# 行为不端的LINQ连接

C# 行为不端的LINQ连接,c#,linq,C#,Linq,我有一个相当大的linq查询驱动我的系统的一部分,我正试图添加一个新功能,但是连接似乎有问题 以前的查询用于返回一个视频列表,我使用该列表创建视图模型,只列出一次每个视频,并显示所有元数据,VisibleStaff,VisiblePlayer和VisibleSteams都是IEnumerable 自从添加了Par,驱动 VisiBuffss/Cuff>,在代码> VideosLinkings < /代码>中的任何视频,其中 VooInType < /Cord>标志被设置为工作人员,每一个条目显示

我有一个相当大的linq查询驱动我的系统的一部分,我正试图添加一个新功能,但是连接似乎有问题

以前的查询用于返回一个视频列表,我使用该列表创建视图模型,只列出一次每个视频,并显示所有元数据,
VisibleStaff
VisiblePlayer
VisibleSteams
都是IEnumerable

自从添加了Par,驱动<代码> VisiBuffss/Cuff>,在<>代码> VideosLinkings < /代码>中的任何视频,其中<代码> VooInType < /Cord>标志被设置为工作人员,每一个条目显示一次,而不是一次,并给我一个工作人员列表,作为<代码> VistiBuffss/Cuff>的元数据。

我想我在某个地方遗漏了一个分组,但我在多个地方尝试了多个分组,似乎无法正确进行

有没有人知道我的加入哪里出了问题,以及我如何在每个视频模型中返回一个视频和多个工作人员

完整查询

from video in Videos
where
    video.ClubID == ClubId &&
    (VideoFilter.Category == 0 || video.VideoCategoryID == VideoFilter.Category)
join userStaff in Database.Users on video.AddedByUserID.Value equals userStaff.UserID
join videoInTeams in VideoInTeams on video.VideoID equals videoInTeams.VideoID into teamsForVideo
join playerInVideo in Database.PlayersVideos on video.VideoID equals playerInVideo.VideoId into
    playersForVideo
join soapVideoLink in Database.VideosLinkings on new {a = video.VideoID, b = VideoInType.SOAPNote}
    equals new {a = soapVideoLink.VideoId, b = soapVideoLink.VideoInType} into soapVideoLinks
join staffVideoLink in Database.VideosLinkings on new {a = video.VideoID, b = VideoInType.Staff}
    equals new {a = staffVideoLink.VideoId, b = staffVideoLink.VideoInType} into
    staffVideoLinks
from svl in staffVideoLinks.DefaultIfEmpty()
join staff in Staff on svl.VideoInKeyId equals staff.StaffID into visibleStaff 
let soapLinks = soapVideoLinks.Any(f => f.VideoInKeyId != -1)
let oldExtension =
    video.H264Version == "Uploaded"
        ? ".mp4"
        : (video.FlashVersion == "Uploaded" ? ".flv" : video.FileExtension)
where
    VideoFilter.ShowSoapVideos || (VideoFilter.ShowSoapVideos == false && soapLinks == false)
orderby video.DateTimeUploaded descending
select new VideoModel
{
    Video = video,
    Category = video.VideoCategory,
    Staff = userStaff.Staff,
    ShowDeleteOption = VideoFilter.ShowDeleteOption,
    VisibleTeams = teamsForVideo.Select(f => f.Team),
    VisiblePlayers = playersForVideo.Select(f => f.Player),
    Thumbnail =
        video.ThumbnailURL != "" && video.ThumbnailURL != null
            ? video.ThumbnailURL
            : "/Images/Videos/noimage.png",
    IsNew = false,
    IsMedicalVideo = soapLinks,
    VisibleStaff = visibleStaff,
    IsStaffVideo = staffVideoLinks.Any()
}
新线

join staffVideoLink in Database.VideosLinkings on new {a = video.VideoID, b = VideoInType.Staff}
    equals new {a = staffVideoLink.VideoId, b = staffVideoLink.VideoInType} into
    staffVideoLinks
from svl in staffVideoLinks.DefaultIfEmpty()
join staff in Staff on svl.VideoInKeyId equals staff.StaffID into visibleStaff 

这是LINQ到SQL吗?生成的SQL是什么?对于实体来说,它大约有61kb的生成SQL。我得挖点东西才能找到它,因为某种原因,它不像往常那么容易找到。老实说,我甚至不知道这对我有什么好处。我对你所说的“为每个条目显示一次,而不是一次,并给我一个员工列表作为VisibleStaff的元数据”感到有点困惑。大概“from”条款以前是不同的?根据我的经验,更改“from”子句很容易引入意外的额外行。“连接似乎行为不正常”——也许,但可能性仍然很小。更有可能是您自己的代码不正确。“我在多个地方尝试了多个组,但似乎无法正确执行”——随机更改不是调试的方法。退后一步,分析问题,为你要做的事情创建一个好的规范。确保规范足够详细,只有一种方法可以编写代码。那么代码将完全按照您的要求工作。正如本文所述,您的问题没有包含足够有用的信息。甚至不清楚您显示的代码的确切功能,也不清楚它与您希望它执行的功能有何不同,也不清楚您是否提供了可靠的重现问题的方法。如果你这样做,你很有可能自己发现问题,但如果不是这样,至少你会有其他人可以运行和调试的东西。