-4

エンティティフレームワークでこれらのoperators(>および>=)ラムダ式を実行すると。どちらも同じ結果を得ています。

  1. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") > 0))
  2. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") >= 0))

Lambda式比較演算子の問題ですか?私はに変更しました

  1. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") > 1))- 結果がありません。その正しくない

  2. db.Companies.where(Company => (Compare(Convert(Company.Name), "y") >= 1))-64件の結果

ソースコード

case operatorType.Greater: return Expression.GreaterThan(Expression.Call(typeof(string),
                            "Compare", null, new[] { argLeft, argRight }),
                             Expression.Constant(1, typeof(int)));

case operatorType.GreaterEqual: return Expression.GreaterThanOrEqual(       Expression.Call(typeof(string), "Compare", null, new[]  { argLeft, argRight }),
                        Expression.Constant(1, typeof(int)));
4

4 に答える 4

2

Company.Name同じ結果が得られた場合は、「Y」に等しいものがないことを意味します

于 2012-09-12T14:42:27.810 に答える
0

すべての応答に感謝します ラムダ式クエリは正しいだけです。

db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") > 0))
db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") >= 0))

「right arg」の値を「Test」に変更しました。テストで「名前」というレコードが 1 つあります。次のクエリを実行しました。

db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") > 0)) 

結果を表示しました 105 (ここでは「テスト」を含む名前は表示されません。 -正解

それから私はこれを実行しました

db.Companies.where(Company => (Compare(Convert(Company.Name), "Test") >= 0)) 

結果106を表示しました(ここでは「テスト」を含む名前が表示されます)-正しい

于 2012-09-13T08:30:50.837 に答える
0

両方のクエリで同じ数の結果が得られた場合、それ(Compare(Convert(Company.Name), "y")は決してゼロに等しくならないことを意味します。ゼロより大きい場合、両方のクエリがそれを返します。ゼロ未満の場合、どちらのクエリもそれを返しません。

于 2012-09-12T14:50:09.630 に答える
0

答えが違うと思うのはなぜですか。

  • 何をしCompareますか?
  • 何をしConvertますか?
  • 何にCompare(Convert(Company.Name), "y")評価されますか?

1それが以上に評価される場合、両方の答えが正しいでしょう。

于 2012-09-12T14:42:57.030 に答える