1

私は最近、古い議会計画を保存して検索できるアプリケーション (vb.net) を作成しました。現在、アプリケーションは問題なく動作していますが、先日、データベースに渡す SQL 文字列を生成するために使用するルーチンを見ていましたが、率直に言って、それは悪かったです。
他の誰かがこれを行うより良い方法を持っているかどうかを確認するために、ここに質問を投稿しました。

私が持っているのは、テキスト ボックスからラジオ ボタンに至るまでの一連のコントロールを含むフォームです。これらの各コントロールはデータベース フィルターのようなもので、ユーザーが検索ボタンを押すと SQL 文字列になります (LINQ クエリにしたいのでLINQ to SQL に変更しました) は、完成したコントロールから生成されて実行されます。

私が抱えている問題は、これらのコントロールのそれぞれをデータベース内のフィールドに一致させ、「if ...then...else」の束を実行せずに効率的に LINQ クエリを生成することです。ステートメント。過去に、コントロールのタグ プロパティを使用して、コントロールをデータベースのフィールド名にリンクしていました。

これが少し混乱している場合は申し訳ありませんが、説明するのは少し難しいです。誰かがアイデアを持っているかどうかを確認するために、そこに投げ出してください。

ありがとうネイサン

4

7 に答える 7

0

これを実現する方法は 100% わかりませんが、ASP.NET MVC ソースのどこから始めるのがよいかはわかっています。最近のバージョンでは、フォームの応答を取得して、LINQ データ ソースへの書き込みを行うヘルパー メソッドに渡すことができます。

MVC は C# だと思いますので、VB の翻訳を探している場合は、.NET Reflector を使用して VB に変換し直すことができます。

于 2008-09-17T01:52:31.333 に答える
0

複雑なアドホック クエリ タイプのものをプログラミングする場合、属性は最良の友になります。より宣言的なアプローチを採用し、クラス、インターフェイス、および/またはプロパティをいくつかのカスタム属性で装飾してから、UI をモデルにバインドする一般的な「接着剤」コードを記述します。これにより、数千行のコントローラー ロジックを変更することなく、モデルとプレゼンテーションを柔軟にできます。実際、これは Microsoft が Visual Studio の [プロパティ] ページを作成する方法とまったく同じです。要件によっては、製品で Microsoft の「EnvDTE.dll」を使用できる場合もあります。

于 2008-09-17T01:45:08.450 に答える
0

ここでのパフォーマンスについてはわかりませんが、LINQ to SQL データ コンテキスト クラスを設定すると、.Select(...) または .Where(...) を使用してデータベース テーブルをクエリできるはずです。これらのいずれかのラムダ式を動的に構築できるはずです。この目的のために、ラムダ式の動的生成を調べることができます。動的ラムダ生成のポイントまですべてを実行しましたが、可能です。

于 2008-09-17T01:46:53.470 に答える
0

IQueryable を取り込んで、保証されている場合はクエリに追加できる usercontrol で各コントロールをラップすることもできます。

したがって、ページコードは次のようになります

var qry = from t in _db.TableName
      select t;

次に、各ユーザー コントロールのメソッドに qry を渡します

IQueryable<t> addToQueryIfNeeded(IQueryable<t> qry)
{
   if(should be added)
      return from t in qry
           where this == that
           select t;
   else
      return qry
}

次に、各コントロールを通過した後、クエリが完了し、それを .ToList() できます。LINQ の優れた点は、.ToList() または .First() を実行するまで何も起こらないことです。

于 2008-09-17T01:40:50.583 に答える
0

「動的」Linq クエリを作成する方法を探していると思います。拡張メソッドのライブラリを使用してそれを行う方法の例を次に示しますこれらのメソッドは、タイプ セーフな言語演算子の代わりに文字列引数を取ります。

于 2008-09-17T02:11:44.890 に答える
0

属性を使った sfusco の方法でもかまいません。私が確信していない唯一のことは、属性をどこにアタッチするかです。なぜなら、デザイナーコードにあるコントロール宣言にアタッチすると、フォームが変更されたときに再生成されるからです。

それとも、sfusco の方法を完全に誤解していますか?

于 2008-09-17T02:24:27.123 に答える
0

おそらく、これを行う正しい方法は、エクステンダー プロバイダーになると思います: MSDN ドキュメント

次に、エディターを使用して接続するフィールド名を指定し、エクステンダー プロバイダーに IQueryable<T> を渡し、条件を追加して、IQueryable<T> を返すことができます。

于 2008-09-17T02:26:56.370 に答える