2016-04-25 12 views
1

whereフィルタを適用しようとしているところに問題があります。しかし、これは意図したとおりに動作していません。c#Lambdaを使用したSQL:複数の結果をフィルタリングできません

それは、このラインについてです

& & fout.Omschrijving.Contains(textboxFilterOmschrijving.Text)

今ではこの1つのフィールドに部分一致ですべての結果を返すことが可能です。しかし、私は1つの入力フィールドに複数の単語を含むことができるようにしようとしているし、それに一致するすべての結果を返します。

入力は '、'で区切られます。そのような:

一覧listMyOmschrijvingen = textboxFilterOmschrijving.Text.Split( '')ToListメソッド();。

次に、これらに一致するものが検索されますが、Containsプロパティを無視して完全一致の場合にのみ表示されます。望んでいたように、これはすべてのこれらの結果を与える

& & listMyOmschrijvingen.Contains(fout.Omschrijving)

。しかし、唯一のことは100%正確である必要があることです。すべての結果をDEF_ACKとDEF_VOLTにしたい場合は、入力フィールド "Omschrijving"としてack、voltと入力すると、SQLデータベースからすべての一致するレコードが得られます。それは私が(希望の結果、最大でも混乱スペース)DEF_ACK、DEF_VOLTを入力する必要が例えば100%完全一致

だとき

は今、それだけでこれを行います。誰もこれを解決する方法のアイデアを持っていますか?おそらく、本当にばかげているかもしれません。なぜなら、それは1つのレコードでは簡単ですが、動的にはそれほど簡単ではないからです。

FoutenResultaat = 
(from x in treinen 
join fout in fouten 
on x.TreinId equals fout.TreinId 
where dateStart <= fout.Datum && dateEnd >= fout.Datum 
&& treinenIds.Contains(fout.Treinen.Name) 
&& fout.Omschrijving.Contains(textboxFilterOmschrijving.Text) 
&& fout.FoutCode.Contains(textboxFilterFout.Text) 
&& fout.Module.Contains(textboxFilterModule.Text) 

orderby fout.Datum descending, fout.Time descending 

select new 
{ 
    Datum = fout.Datum, 
    Time = fout.Time, 
    FoutCode = fout.FoutCode, 
    Omschrijving = fout.Omschrijving, 
    Module = fout.Module.ToUpper(), 
    FoutId = fout.FoutId, 
    Name = x.Name, 
}); 
+0

あなたは、入力、出力、および期待される結果の一例を提供することができますか?例を取らずにあなたの試みに従い、何が間違っているのかを理解することは難しいです。 – Sinatr

答えて

0

私はここでの問題はstring.Contains()IEnumerable.Contains()よりも全体の異なる方法であるということだと思います。文字列にContains()を使用すると、その文字列の内容を調べて、指定された文字列が含まれているかどうかを確認します。value;これがあなたが参照していた部分一致を得る理由です。一方、リストにContains()を使用すると、リスト内の項目の1つで完全一致が検索されます。

(おまけ:.Trim()あなたのスペースの問題のために):これを試してみてください

&& listMyOmschrijvingen.Where(l => fout.Omschrijving.Contains(l.Trim())).Any() 
関連する問題