2016-08-09 7 views
0

Contactsテーブルからデータベース内のすべてのレコードを取得し、ユーザーが検索フォームで選択した値に応じてフィルターを適用するfindAll関数があります。結果は、その時点で1つのフィルタでフィルタリングされます。C#IQueryable not working

IQueryable<Contact> resultContacts = db.Contacts; 

if(request['Name'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Name.Contains(Name)); 
} 

if(request['Phone'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Phone.Equals(Phone)); 
} 

if(request['Company'] != "") 
{ 
    resultContacts = resultContacts.Where(a => a.Company.Contains(Company)); 
} 

return resultContacts; 

問題は、これが機能していないことです。それぞれif内のresultContacts.Whereは元のresultContactsにリセットされています。何らかの理由で最初の行にありました。例えば、私がデバッグすると、変更は1番目のif(100個のレコードのうち10個で終わる)に適用されますが、2番目のifに入ると、コードは元のresultContactsを照会しています。最初の結果if

これは2週間前まで1年以上にわたって正常に機能しました。私のコード上で何か変わったかどうかわかりません...もし私がこの変更を行うリファレンスを追加したら、

理由は何ですか? ありがとうございました!

+0

各クエリでリクエストオブジェクトを使用することを意味しましたか? – Niklas

+1

私はこの構文を許して驚いています 'request ['Phone']'一重引用符 'char'ではなく' string' – Imad

+0

また、 'request ['Name'])); ] 'は' Name'と同じものではありません。 「電話」と「会社」の同上。あなたが持っているもののような外観のコードを置かないでください。 *実際のコードを投稿してください。 – hvd

答えて

-2
var results = db.Contacts 
    .Where(a => request["Company"] == String.Empty || a.Company.Contains(Company)) 
    .And(a => request["Phone"] == String.Empty || a.Phone.Equals(Phone)) 
    .And(a => request["Name"] == String.Empty || a.Name.Contains(Name))); 
+2

あなたは3つの条件すべてをWhere節の権利に統一することができますか?これは動作するように見えますが、私がそれを理解していることを確認したいだけです。 – MichaelThePotato

+0

はい、可能ですね。 – Matt

+1

いくつかのコードだけでなく、あなたの答えにいくつかの説明をしてください。私はOPコードとこれとの間の動作の違いを理解していません。私にとっては、彼らは同じように働くべきです... – 3615