2

同じタイプ (顧客) の 2 つのリストに参加する必要がある課題があります。それらには、繰り返しを避けるために必要な同様のエントリがあります。

これは私の顧客クラスです:

class Customer
{
  private String _fName, _lName;
  private int _age, _cusIndex;
  private float _expenses;

  public Customer(String fName, String lName, int age, float expenses, int cusIndex)
  {
    this._fName = fName;
    this._lName = lName;
    this._age = age;
    this._expenses = expenses;
    this._cusIndex = cusIndex;
  }
}

したがって、 とList<Customer>という名前の 2 つの がcustomers1ありcustomers2ます。Collections メソッドを使用せずにこれら 2 つを結合する必要があります (customer1.Union(customer2).ToList();ただし、Linq クエリを使用するなど)。

私が書いたLinqクエリは次のとおりです。

var joined = (from c1 in customers1
              join c2 in customers2
              on c1.CusIndex equals c2.CusIndex
              select new {c1, c2});

しかし、これにより、両方のリストに表示されるメンバーが得られます。しかし、繰り返しなしですべてが必要です。解決策はありますか???

4

2 に答える 2

8

メソッドに相当するクエリがないようUnionです。このメソッドは、メソッド チェーンの呼び出しまたはクエリで使用する必要があります。

2 つのシーケンスの和集合を返すことに関するMSDN ドキュメントを見ると、次の公式クエリが表示されます。

var infoQuery =
    (from cust in db.Customers
    select cust.Country)
    .Union
        (from emp in db.Employees
        select emp.Country)
;

したがって、あなたの場合には2つのオプションしかありません:

  1. メソッドチェーン:

    var joined = customers1.Union(customers2);
    
  2. LINQ クエリ

    var joined = (from c1 in customers1
                  select c1)
                 .Union
                     (from c2 in customers2
                      select c2);
    
于 2015-11-27T05:12:53.127 に答える
1

Distinct を使用して重複を除外しないのはなぜですか?

 var joined =  (from c1 in customers1
          join c2 in customers2
          on c1.CusIndex equals c2.CusIndex
          select new {c1, c2}).Distinct();

には素敵な拡張機能がありMicrosoft.Ajax.Utilitiesます。と呼ばれる関数がありDistinctBy、これはあなたの場合により関連性があるかもしれません。

于 2015-11-27T05:24:46.543 に答える