2

2つのデータテーブルを結合し、LINQを使用して選択しています。'orderby'行でエラーが発生します。「名前「連絡先」は現在のコンテキストに存在しません」。'customer'変数の列で並べ替えると機能しますが、'contact'変数の列は使用しません。

次に、orderby行を削除し、次のようなラムダ式を使用して順序付けを試みました。

orders.OrderBy(o => (string) o["ContactName"]; 

「[]を使用したインデックスを'AnonymousType#1'型の式に適用できません。並べ替えのためだけに新しいクラスを作成したくありません。

この種の並べ替えを行う方法についてのアイデア。両方のテーブルの複数の列を使用して並べ替えを行います。

コード:

  var orders = (from customer in Customers.AsEnumerable()
                          join contact in Contacts.AsEnumerable()
                              on (int) customer["CustomerID"] equals (int) contact["CustomerID"] into outer
                                from contact in outer.DefaultIfEmpty()
                                orderby contact["ContactName"]   
                          select new
                                     {
                                         ContactID = (int) contact["ContactID"]),
                                         Name =  (string) contact["ContactName"]),
                                         City =  (string) contact["City"])
                                  });
4

1 に答える 1

1

いくつかの構文の問題があります (括弧が多すぎる、 fe contact["ContactID"]))、これはうまくいくはずです:

var orders =  from customer in Customers.AsEnumerable()
              join contact in Contacts.AsEnumerable()
              on customer.Field<int>("CustomerID") equals contact.Field<int>("CustomerID") into outer
                  from contact in outer.DefaultIfEmpty()
                  orderby contact["ContactName"]   
                  select new
                  {
                        ContactID = contact.Field<int>("ContactID"),
                        Name =  contact.Field<String>("ContactName"),
                        City =  contact.Field<String>("City")
                  };

補足:私は強力な型Field拡張メソッドを使用します。

于 2012-06-01T22:50:41.317 に答える