1

こんにちは、レコードにnull値がある場合、テーブルの結合に問題があります。

2つのdataTablesがあります:

  1. ワーカー:(workerID、workerName、workerAdress)
  2. トランザクション:(transactionID、transactioinValue、worker1、worker2)。ここで、worker 2はオプションであるため、null値を含めることができます。

だから私はこのようなコードを始めました:

var record = from transaction in dtTransactions.AsEnumerable()
    join worker1 in dtWorkers.AsEnumerable() on (int)transactions["worker1"] equals (int)worker1["workerID"]
    join worker2 in dtWorkers.AsEnumerable() on (int)transactions["worker2"] equals (int)worker2["workerID"]
    select new
    {
     ID = (int)transactions["transactionID"],
     Name1= worker1["workerName"],
     Name2= worker2["workerName"]
    };

したがって、worker2がnullでない場合はすべて正常に機能しますが、null値がある場合は、結合できませんでした。誰かがこの問題を解決するのを手伝ってもらえますか?dataTableでnullの場合、worker2名のない結果レコードが欲しいです。

出来ますか?

4

2 に答える 2

1

このような左結合を行う必要があります。

var record = from transaction in dtTransactions.AsEnumerable()
                     join worker1 in dtWorkers.AsEnumerable() on (int)transactions["worker1"] equals (int)worker1["workerID"]
                     join worker2 in dtWorkers.AsEnumerable() on (int)transactions["worker2"] equals (int)worker2["workerID"] into w2
                     from wrk in w2.DefaultIfEmpty()
                     select new
                     {
                         ID = (int)transactions["transactionID"],
                         Name1= worker1["workerName"],
                         Name2= wrk["workerName"]
                     };

次に、このようにオブジェクト プロパティを指定しない理由はありますか。

                var record = from transaction in dtTransactions.AsEnumerable()
                 join worker1 in dtWorkers.AsEnumerable() on (int)transactions.worker1 equals (int)worker1.workerID
                 join worker2 in dtWorkers.AsEnumerable() on (int)transactions.worker2 equals (int)worker2.workerID into w2
                 from wrk in w2.DefaultIfEmpty()
                 select new
                 {
                     ID = (int)transactions.transactionID,
                     Name1= worker1.workerName,
                     Name2= wrk != null ? wrk.workerName : ""
                 };

角かっこの削除に注意してください

于 2012-08-28T11:03:13.970 に答える
0
from x in left
where x.Id != null
join y in right on x.Id equals y.Id into rightMatches
from y2 in rightMatches.DefaultIfEmpty() 
select new {x, y2};
于 2012-08-28T11:04:28.603 に答える