http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-でScottGのDynamic.vb拡張機能の実装に問題があります。私のvbソリューションのquery-library.aspx 。おそらく他の方法があることは知っていますが、このアプローチは私に非常に大きな柔軟性を与えてくれます。StackOverflow(80以上のQ&A)や他の多くのサイトを検索しましたが、運が悪かったです。VS2010を使用しています。
ルート名前空間がない問題にDynamic.vbを含めてから、メインプロジェクトにそのプロジェクトへの参照を追加しました。(2つではなく)4つのオーバーロードに対してインテリセンスを取得しているので、拡張機能がスコープ内にあると確信しています。
スコットが示したように、私は条項、特にOrderByで苦労していました。スコットのVBの例のように文字列を渡すだけでは、「これらの引数でアクセス可能な「OrderBy」を呼び出すことができないため、オーバーロードの解決に失敗しました」というエラーが発生しました。
コードの行は次のとおりです。
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
.OrderBy("Name")
そこで、Lambda式を渡すと述べている他の参照を見つけました。だから私はこれを試しましたが、ソート機能がまだ機能していないように見えても、少なくともエラーは発生しません。コンパイルして実行するコードは次のとおりです。
Private Sub SortByColumn()
If Not cmbComponentFilter.SelectedItem.ToString = "All" Then
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
Where Component.ComponentType.ToString = cmbComponentFilter.SelectedItem.ToString _
Order By Component.Name
Dim OrderedFilteredComponentList = From Component As MX.Component In FilteredComponentList.AsQueryable _
.OrderBy(Function(str) dgvComponents.Columns(e.ColumnIndex).Name)
bsComponentList.DataSource = OrderedFilteredComponentList
dgvComponents.DataSource = bsComponentList
Else
Dim FilteredComponentList = From Component As MX.Component In ComponentList.AsQueryable _
.OrderBy(Function(str) dgvComponents.Columns(e.ColumnIndex).Name)
bsComponentList.DataSource = FilteredComponentList
dgvComponents.DataSource = bsComponentList
End If
End Sub
dgvComponents.Columns(e.ColumnIndex).Nameに問い合わせると、並べ替えたいオブジェクトプロパティが表示されますが、並べ替えが機能しません。なぜスコットの実装がうまくいかないのか心配ですが、彼の基調講演を聞いたり、ブログを読んだりしているので、問題は私の実装にあると思います。
どちらかを働きたいのですが、その理由も理解する必要があります。文字列の受け渡しが機能しないのはなぜですか?関数で宣言されたPARAMARRAYはオプションではありませんか?私はこれに8時間投資しました、そして私は他の道を進むことができましたが、私はあきらめるためにこのアプローチへの答えを見つけることにあまりにもコミットしています(アプローチによる自殺協定)。
任意のガイダンスをいただければ幸いです。私は非常に意気消沈しているので、それがばかげた間違いであったとしても私を悩ませることはありません(それはしばしばそうです)。
助けてくれてありがとう。
r / Jamie