C# LINQ外部联接产生错误

C# LINQ外部联接产生错误,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,以下LINQ语句C中的简单外部联接引发了一个野生异常: var query = from cs in db.scan join cp in db.patient on cc.pid equals cp.pid into cpGroup from cp2 in cpGroup.DefaultIfEmpty() select new { Name = ((cp2 == null) ?

以下LINQ语句C中的简单外部联接引发了一个野生异常:

var query = 
        from cs in db.scan
        join cp in db.patient on cc.pid equals cp.pid into cpGroup
        from cp2 in cpGroup.DefaultIfEmpty()
        select new 
        { 
            Name = ((cp2 == null) ? 
                String.Empty : 
                cp2.plastname + ", " + cp2.pfirstname), 
            DOB = ((cp2 == null) ? 
                DateTime.MinValue : 
                cp2.pdateofbirth) 
        };
例外情况:

Auf die变量cp2 vom典型核心。患者与Bereich verwiesen,您是jedoch nicht定义者

翻译成:

Core.patient类型的变量cp2按区域引用,但未定义


这里怎么了?顺便说一句。此错误无法被周围的try-catch块捕获…

连接可能有问题。这是林奇完成同样事情的方法

 var query = 
    from cs in db.scan
    from cp in db.patient
    where cs.pid == cp.pid
    select new 
    { 
        Name = cp.plastname + ", " + cp.pfirstname), 
        DOB = cs.pdateofbirth
    };

尝试使select仅选择new{Test=cp2}。还是错误吗?是的,还是错误…我不知道。尝试将其放入并使用.Dump函数查看它的外观?'cc.pid equals',您是指cs.pid equals,对吗?另外,patient是普通类的普通列表,还是实体框架的enitty,您尝试使用此查询从数据库加载数据?我也会这样做1这是内部连接,而不是外部连接,因为OP正试图得到它。2这是做一个笛卡尔乘积,然后过滤掉它,这比连接的效率要低得多,因为连接的优化程度要高得多。