5

Toy.edmx (Toy というデータベースから生成された ADO.NET エンティティ データ モデル) を含む Visual Basic WPF アプリケーション プロジェクトを作成しました。

そのWindow1.xaml.vbファイルは次のようになります。

1 クラス ウィンドウ1
2   
3 プライベートサブウィンドウ1_Loaded( _
4 ByVal 送信者 As System.Object, _
5 ByVal e As System.Windows.RoutedEventArgs) _
6 ハンドル MyBase.Loaded
7   
新しい ToyEntities1 として 8 Dim DC
9 Label1.Content = (dc.ClientSet のクライアントとして c から _
10 c).First.FirstName を選択します。
11  
12 エンドサブ
13  
14 エンドクラス

それはうまくいきます。

しかし、ファイルClient.vbを追加すると...

1 部分公開クラスのクライアント
2 関数 IsWashington() をブール値として
3 Return Me.LastName = "ワシントン"
4 終了機能
5 エンドクラス

...そして、 Window1.xaml.vbクエリに WHERE 句を追加します...

9 Label1.Content = (dc.ClientSet のクライアントとして c から _
10 どこで c.IsWashington _
11 c).First.FirstName を選択します。

...次に、この NotSupportedException を取得します。

LINQ to Entities はメソッド 'Boolean IsWashington()' メソッドを認識せず、このメソッドはストア式に変換できません。

ADO.NET Entity Framework オブジェクトを部分クラスで拡張するにはどうすればよいですか?

4

5 に答える 5

3

これはあなたがやろうとしていることですか - フィルターをクライアント クエリに適用するメソッドを作成します。

私は vb.net を知らないので、このフリーハンド コードを 100% 信用しないでください。

Partial Public Class Client
  Public Shared Function IsWashington(query As IQueryable(Of Client)) As IQueryable(Of Client)
    Return query.Where(Function(someClient) someClient.LastName = "Washington")
  End Function
End Class

後で、いくつかの呼び出しコード。

IQueryable(Of Client) someQuery = dc.ClientSet.AsQueryable
someQuery = Client.IsWashington(someQuery)

Label1.Content = someQuery.First.FirstName

これがうまくいくことを願っています!

于 2008-11-04T03:34:17.403 に答える
2

問題は、コードを記述していて、Entity Framework がそれを SQL に変換することを期待していることです...それはできません。LINQ to SQL ではそれができないのと同じです。

プロパティが「C:\」ドライブからファイルを読み取った場合を想像してみてください...どのように処理すると思いますか? - ありえない。

于 2008-11-04T01:39:14.983 に答える
1

shahkalpesh は正しいです。生成されたクラスと一致するように、拡張クラスの周りに名前空間を追加する必要があります。

于 2008-12-20T05:39:34.287 に答える
1

Client クラスとはどのような型ですか?

"IsWashington" を含むファイルに名前空間 (クライアントの "エンティティ クラス" が定義されているものと同じ) を追加する必要がある場合があります。

于 2008-11-03T23:35:56.513 に答える
1

View から Client オブジェクトをフィードすることで、この特定の問題を回避できます。SQL CASE ステートメントを使用して、ビット列の値を設定します。

SELECT col1, col2, col3, LastName CASE LastName WHEN 'Washington' THEN 1 ELSE 0 AS IsWashington FROM Client

クライアント エンティティ オブジェクトの基礎としてビューを使用する場合、IsWashington 列は、他のすべての列と共にクラスのメンバーになる必要があります。

于 2008-11-05T19:33:28.810 に答える