LINQ左连接错误

时间:2013-04-24 12:53:24

标签: linq c#-4.0 left-join

我有2个名为学生条目的通用列表,它们的关系为1到0..1。学生1:0..1参赛作品

如果存在,我想从条目中获取学生姓名,ID和英语,数学详细信息列表。

我的LINQ查询如下,我在 se.English 时得到了空引用错误。你能帮忙吗?感谢。

var query = from s in students
            join t in entries
            on s.StudentDetailID equals t.StudentDetailID into StudentEntries
            from se in StudentEntries.DefaultIfEmpty()                                    
            select new { s.StudentDetailID, s.LastName, s.FirstName,
            se.English};

2 个答案:

答案 0 :(得分:1)

正如你所说你有一个1-0..1的关系所以se.english可能是null(因为你使用了一个左外连接),你应该在你的查询中处理它,我认为它会是String并且如果它为null则放入“”,您可以根据需要处理它。

var query = from s in students
            join t in entries
            on s.StudentDetailID equals t.StudentDetailID into StudentEntries
            from se in StudentEntries.DefaultIfEmpty()                                    
            select new { s.StudentDetailID, s.LastName, s.FirstName,
            English = se.English?? ""};

答案 1 :(得分:0)

se可能为null,因为您已将其分配为StudentEntries.DefaultIfEmpty()。并且类的默认值为null。所以你不能在没有测试它之前调用se.English

var query = from s in students
        join t in entries
        on s.StudentDetailID equals t.StudentDetailID into StudentEntries
        from se in StudentEntries.DefaultIfEmpty()                                    
        select new { s.StudentDetailID, s.LastName, s.FirstName,
        se == null ? null : se.English};