1

Orchard モジュールの開発で、フィールドによってフィルタリングされた ContentParts の大文字と小文字を区別しないように取得するにはどうすればよいですか? 私が試してみました

var name = viewModel.Name.ToUpper();
var samples = _contentManager.Query<SamplePart, SamplePartRecord>()
                .Where(x => x.Name.ToUpper() == name)
                .List();

そして、私はエラーが発生しています

Index was out of range. Must be non-negative and less than the size of the collection.

Parameter name: index

しかし、大文字と小文字を区別するかどうか気にせずに取得しようとすると

var name = viewModel.Name;
var samples = _contentManager.Query<SamplePart, SamplePartRecord>()
                .Where(x => x.Name == name)
                .List();

エラーは報告されていません。

何を与える?

4

1 に答える 1

1

Where句内の式は、ある時点で NHibernate によって SQL クエリに変換されることに注意してください。したがって、そこでできることはかなり制限されています。この場合、ToUpperメソッドがサポートされていないようです。

もう 1 つ - SQL Server での文字列比較の動作は、データベースに設定されている実際の照合順序によって異なります。デフォルトでは大文字と小文字が区別されないため、文字列比較では大文字と小文字が区別されません。したがって、デフォルトに固執する場合は==、最後の例のように、2 つの文字列の普通の文字列で十分です。

于 2015-05-28T21:54:04.077 に答える