如果在右表

时间:2018-01-29 22:06:11

标签: c# sql-server linq

我正在尝试用c#linq来连接两个sql表,当找不到匹配项时设置默认值

在Months表中,我有以下数据

MonthId Name
1       Jan
2       Feb
3       Mar
4       Apr
5       May

mData低于数据

MonthId Count 
1       10    
2       20
3       5

我希望得到如下结果

   Name     Count 
    Jan       10    
    Feb       20
    Mar       5   
    Apr       0
    May       0

我有以下查询,只有在找到匹配时才会返回

from p in Months
    join g in mData on p.MonthId equals g.MonthId
    select new {
    p.Name,
    g.Count
    }

1 个答案:

答案 0 :(得分:1)

您需要将联接的结果放入一个组并调用DefaultIfEmpty

from p in Months
    join g in mData on p.MonthId equals g.MonthId into monthData
    from md in monthData.DefaultIfEmpty(new MData{Count = 0})
    select new {
        p.Name,
        md.Count
    }

HereDefaultIfEmpty()

的MSDN