2017-02-13 12 views
-2

私はresultsというモデルのリストを持っています。この特定の文字列を含む結果リストからそれらの値を取得する必要があります。リストに特定の文字列が含まれているかどうかを調べるには

List<Search> results = new List<Search>(); 

results = db.Users.Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 

results = results.Where(w => (model.Name == null || w.Name.Contains(model.Name))).ToList(); 

最初の結果クエリは5000行を返しますが、もう一つは、私は2番目のクエリでやろうとしていますどのような0を返します。名前がnullであるか、名前が文字列の一部が含まれている場合、それを追加した場合であります結果リストに追加します。 何か不足していますか?

私は基本的に私はmodel.Nameの値をチェックして、それが適切に表示されます。 Check if a string within a list contains a specific string with Linq

のように同じことを行うように頼まリンクのカップルをチェックしました

Model.Name = nullの検索文字列がない場合はクエリが機能します。すべてのレコードを取得します。

+4

その後、すべての行をRAMにフェッチしてからフィルタリングすることをお勧めします。あなたのSQLサーバは、CPU /ネットワークの負荷、オーバーヘッド、ラムの使用量を減らすために既に仕事をしているはずです。 – fubo

+1

結果に実際に 'model.Name'が含まれていることをどのように知っていますか?それはどこにありますか?私たちは確信することはできません...また、あなたはケーシングの問題に対処していません。 'Aaron'は' aaron'と同じではありません。 –

+0

'モデル'フィールドは誰ですか、 '検索'変数ですか? – octavioccl

答えて

1

次の文を考慮してください。db.UsersでnullとContainsをチェックする必要があります。私がここに追加しなければならないもう一つのことは、x.Nameがヌルならば、.ContainsNullReferanceExceptionを上げるでしょう。それも考慮する必要があります。次に、次のクエリを見てみましょう。

List<Search> results = db.Users.Where(x=> x.Name==null || (x.Name !=null && x.Name.Contains(model.Name))) 
           .Select(f => new Search{ Name = f.Name, Type = f.OrganizationType.Name, County = f.County.Name }).ToList(); 
+0

'Contains( 'foo')'は 'Like'に変換されます%foo 'Like'はすでに大文字と小文字が区別されていないので、ToLower()は必要ありません。 – fubo

+0

2つのクエリでパフォーマンスの問題が発生する可能性があると認識していますが、 – TheFallenOne

+0

@The_Outsider 'ToList()'は結果をラムに書き込みます。あなたはあなたのアプリケーションでそれを行います、不運なことにSQLクエリでそれを行います – fubo

関連する問題