0

我对 Linq 很陌生,现在我遇到了以下问题。我有以下功能:

    public Dictionary<DateTime, List<PloegenRooster_Uitzonderingen>> GetPloegenRoosterUitzonderingen(char ploeg, DateTime fromDate, DateTime toDate)
    {
        return (
            from item in this.GetTable<PloegenRooster_Uitzonderingen>()
            join itemType in PloegenRooster_Uitzondering_Types on item.UitzonderingTypeId equals itemType.Id
            group item by item.Datum
        ).ToDictionary(d => d.Key, d => d.ToList());
    }

这完美地工作。但是,现在我正试图将其变成 LEFT JOIN。我最终得到以下结果:

    public Dictionary<DateTime, List<PloegenRooster_Uitzonderingen>> GetPloegenRoosterUitzonderingen(char ploeg, DateTime fromDate, DateTime toDate)
    {
        return (
            from item in this.GetTable<PloegenRooster_Uitzonderingen>()
            join itemType in PloegenRooster_Uitzondering_Types on item.UitzonderingTypeId equals itemType.Id into itemTypeJ
            from itemTypeS in itemTypeJ.DefaultIfEmpty()
            group item by item.Datum
        ).ToDictionary(d => d.Key, d => d.ToList());
    }

但是现在我遇到了以下异常:

The null value cannot be assigned to a member with type System.Int32 which is a non-nullable value type. 
4

2 回答 2

0

在第一个示例中的 (Inner)Join 中,仅选择与另一个表中的行匹配的行。

在左连接中,选择了表 A 中的所有行。如果第二个表中没有适合连接的行,则第二个表的列将填充 NULL 值。创建的对象具有整数属性。整数属性不包括 NULL 值。

您要么必须将 Integer 属性更改为可为空的数据类型,要么将 Integer 属性设置为可为空。

于 2012-09-21T13:46:00.123 回答
0

在您的第一次尝试中,有一个等值连接,并且连接中的两个表都有一个结果。但是,当使用左连接时,您的一个表会导致空值,因为两个表之间没有匹配的键。

正如@TheJoelaut 所提到的,通过添加一个 select 子句使您的属性可以为空,或者在 null 的情况下分配零或有效的整数数据:

选择 itemTypeS == null ?(Int32)0.00 : itemTypeS.property

于 2012-09-21T14:04:10.597 回答