LINQ式を使用して、DAL(サーバー側)からクライアント側を切り離す
-
23-08-2019 - |
質問
私はLINQに関する多くの投稿の間で答えを見つけることができなかったので、ここにいます。クライアントサーバーアプリケーションがあります。クライアント側は、nhibernateを使用して偶然に実装されているサーバー側の実際のDALの知識がまったくありません。つまり、クライアント側のアセンブリからのNhibernateへの参照はなく、データベースの抽象化もありません。クライアント側は、CSLAビジネスオブジェクトに基づいたエンティティの観点から厳密に話します。
クライアント側に表示されたエンティティをフィルタリングさせたいと思います。私のアイデアは、クライアント側にLINQ式を構築し、サーバー側に送信し、linqを使用してNhibernateを使用してクライアントに戻すデータを一致させるデータを取得させることです。
LinqをダウンロードしてNhibernateにコンパイルしましたが、残念ながら、それぞれのNhibernateContextインスタンス(別名サーバー側)からLinq式(別名クライアント側)を切り離す例を見つけることができません。すべての例は似ているようです
from c in db.Customers where ...
つまり、1つのステートメントにおけるコンテキスト(db.customers)と式(Where ...)の両方。
それらを切り離すことは可能ですか?ありがとう。
解決 2
これは非常に簡単であることが判明しました - from c in db.Customers where linq-exp select c
に相当します db.Customers.Where(linq-exp)
.
私は実際にこれをより広範な問題の一部として必要としていました - クライアント側にLINQ式を指定し、それを使用してサーバー側にデータを取得します。私の投稿 ここ 詳細について説明します。
他のヒント
この投稿を見てください。この概念を使用してクエリパラメーターを渡してから、クエリを動的に構築できます。