2012-04-25 11 views
0

私は、特定の条件を満たすレコードのために私たちのデータベース(EF経由で公開されている)を検索するアプリケーションを持っています。メインテーブルは2つあります(ジョブと受信者)。受信者はジョブIDによってジョブテーブルにリンクされます。オプションクエリ内のwhere句

ジョブレコードには、さまざまなフィールド(プロセスの日付、名前、ジョブタイプ)があります。受信者には名前とIDのフィールド(アカウント番号、姓など)が多数あります。

検索するフィールドのリストが表示される検索画面を表示します。 ASP.netコードは、ユーザーが入力した(または選択された)テキストボックスを表示し、それに基づいてクエリを作成します。

私は、最も効率的な方法を見つけようとしています。

ラフロジックは次のとおりです。私はこだわっている

if not string.isnullorempty(txtName.text) then 
     'Query.Where.Add clause = " AND Name like '@txtName' 
     'Query.WhereParameters.Add("@txtName",txtNAme.text 
    end if 

if not string.isnullorempty(txtAccountNumber.text) then 

.....etc 


if not string.isnullorempty(txtFromDate.text) then.. 

が追加条項に追加する方法を考え出すされています。私はEntity SQLを使うべきですか?

強く型付けされたEFオブジェクトも返すことができますか?ジョブと受信者の両方のオブジェクトを返すことは可能ですか?

私が選択した受信者をした場合。 、仕事。 ....これは正しく解析し、リンク先の受信者オブジェクトとジョブオブジェクトを返しますか?

答えて

2

厳密に入力されたフィルタリングされていないクエリから開始する場合は、Queryable.Whereを使用してフィルタを追加できます。

Name = txtName.Text 
If Not String.IsNullOrEmpty(Name) Then 
    Query = Query.Where(Function(j) j.Name.Contains(Name)) 
End If 

フィルタされていないクエリが複数のレコードを正しくリンクする場合、フィルタを追加するとこれらのリンクは保持されます。

(免責事項:私は通常、VB.NETを使用していない。そこに愚かな構文エラーかもしれないが、あなたは一般的なアイデアを得ることができる必要があります。)

+0

だから私は呼び出しquery.whereを維持し、中に追加した場合新しい機能、theyllは "と" SQLのようなcominedされる?例:name = johnとdate = @date。彼らがまたはで結合されるように指定する方法はありますか? – Dane

+0

1)はい。 ( 'Query = 'の部分を覚えておいて、' Query.Where'を呼び出してその結果を無視しないでください。)概念的には、 'Query = Query.Where(a).Where(b).Where(c)'は擬似コード) 'Query =(select * from(select * from Query where a)where b)where c)'と同じ結果を返します。 && c) 'と書いてあり、EFはそれをそのまま翻訳します。 2)これには「Union」を使うことができます。 'Query.Where(a).Union(Query.Where(b))'は 'Query.Where(a|| b) 'と同じ結果を返します。 – hvd