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

最初の例のように(内部)結合では、他のテーブルの行と一致する行のみが選択されます。

左側の結合では、表Aのすべての行が選択されています。2番目のテーブルに結合に適合する行がない場合、2番目のテーブルの列はNULL値で埋められます。作成されるオブジェクトは整数プロパティを持っています。整数プロパティはNULL値を除きません。

Integerプロパティをnull許容データ型に変更するか、Integerプロパティをnull許容にする必要があります。

于 2012-09-21T13:46:00.123 に答える
0

最初の試行では等結合があり、結合内の両方のテーブルに結果があります。ただし、左結合を使用すると、両方のテーブル間に一致するキーがないため、テーブルの 1 つが null 値になります。

@TheJoelaut が述べたように、select 句を追加して、プロパティを null 可能にするか、null の場合はゼロまたは有効な整数データを割り当てます。

itemTypeS == null を選択しますか? (Int32)0.00 : itemTypeS.property

于 2012-09-21T14:04:10.597 に答える