1

私は3つのリスト、ユーザーへの支払いのリスト、同じ支払いで支払われた税金のリスト、同じ支払いで支払われた州税のリストを持っています。

問題は、支払いごとに税金または州税が存在しない可能性があるため、支払われた税金または州税の両方と一致する個々の支払いが必要ですが、これらの一方または両方が存在しない場合は引き続き表示されます。私は今それを持っているので、これは問題の特定のクエリです

    var joinEverything = 
    from IP in IndividualPaymentsList
    join TD in TaxDetailsList.DefaultIfEmpty()
        on IP.UserId equals TD.UserId
        where IP.WeekEndDate == TD.WeekEndDate
    join ST in StateTaxDetailsList.DefaultIfEmpty()
        on IP.UserId equals ST.UserId
        where IP.WeekEndDate == ST.WeekEndDate
    select new 
    {
        IP.UserId,
        FedTax = TD.CheckAmount,
        StateTax = ST.CheckAmount,
        IP.CheckAmount,
    };

現在、たとえば州税にレコードが存在しない場合、「NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。ST.CheckAmountの値としてnullを受け入れるだけでなく

4

1 に答える 1

2

あなたはDefaultIfEmpty()問題のないことをしていますが、このデフォルト値に設定されているオブジェクトのプロパティを取得しようとしています。たとえば、TD.UserIdnull.UserIdを呼び出していることを意味します。

以下はそれを機能させるための私の試みです-しかし、私はそれをテストするためのデータを実際に持っていないので、どこかで構文を台無しにしたか、範囲外の変数にアクセスしようとするかもしれません-それを試してみましょうあなたが問題に遭遇したかどうか私は知っています:

var joinEverything = 
    from IP in IndividualPaymentsList
    join TD in TaxDetailsList
        on IP.UserId equals TD.UserId into group1
        from g1 in group1.DefaultIfEmpty()
        where g1 == null || (IP.WeekEndDate == g1.WeekEndDate)
    join ST in StateTaxDetailsList
        on IP.UserId equals ST.UserId into group2
        from g2 in group2.DefaultIfEmpty()
        where g2 == null || IP.WeekEndDate == g2.WeekEndDate
    select new 
    {
        IP.UserId,
        FedTax = (g1 != null ? g1.CheckAmount : String.Empty), // or your default value for the type
        StateTax = (g2 != null ? g2.CheckAmount : String.Empty),
        IP.CheckAmount,
    };
于 2012-05-24T19:58:59.423 に答える