0

ラムダクエリで toLower() に問題があります。私はこのコードを持っています

var filterResult = articleList
                        .Where(m => m.Summary
                            .Contains(filteredModel.Keyword) || m.Body.Contains(filteredModel.Keyword) || m.Headline.Contains(filteredModel.Keyword) 
                            || m.Title.Contains(filteredModel.Keyword))
                        .AsQueryable();

toLower() メソッドを sql として追加する必要があります。例えば:

var filterResult = articleList
    .Where(m => m.Summary.toLower()
        .Contains(filteredModel.Keyword.toLower()) || m.Body.toLower().Contains(filteredModel.Keyword.toLower()) || m.Headline.toLower().Contains(filteredModel.Keyword.toLower()) 
        || m.Title.toLower().Contains(filteredModel.Keyword.toLower()))
    .AsQueryable();

上記のコードのように、ラムダは使用できません。これを達成するために他の方法があるのではないかと思います。

4

2 に答える 2

0

あなたは同じことを達成することができます

    .Where(m => m.Summary.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 
       || m.Body.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 
       || m.Headline.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 
       || m.Title.IndexOf(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) >= 0 

これはあなたのLinqプロバイダーによってサポートされるべきだと私は信じています

拡張メソッドを作成することで、ここで説明するようにこれをすっきりさせることができます

public static bool Contains(this string source, string toCheck, StringComparison comp) {
  return source.IndexOf(toCheck, comp) >= 0;
}

だからあなたはそれからすることができます

.Where(m => m.Summary.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) 
           || m.Body.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) 
           || m.Headline.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) 
           || m.Title.Contains(filteredModel.Keyword, StringComparison.OrdinalIgnoreCase) 
于 2012-08-08T14:48:27.680 に答える
0

ToLower動作するはずです。別の行に分割して、どのチェックが失敗しているかを絞り込んでみてください。実際に結果をプルダウンするまで実行されないことに注意してください。

var keyword = filteredModel.Keyword.ToLower();
var filterResult = articleList.Where(m => m.Summary.ToLowerInvariant().Contains(keyword));
filterResult = filterResult.Where(m => m.Body.ToLower().Contains(keyword));
filterResult = filterResult.Where(m => m.Headline.ToLower().Contains(keyword));
filterResult = filterResult.Where(m => m.Title.ToLower().Contains(keyword));

また、参考までに-文化に依存しない比較のために小文字に変換する場合は、ToLowerInvariantを使用する必要があります...または、信頼性が高いため、ToUpperInvariantを使用することをお勧めします。

于 2012-08-08T14:50:30.013 に答える