0

Entity Framework で次のクエリ メソッドを実現するにはどうすればよいですか

 Example example = Example.create(cat)
    .excludeZeroes()           //exclude zero valued properties
    .excludeProperty("color")  //exclude the property named "color"
    .ignoreCase()              //perform case insensitive string comparisons
    .enableLike();             //use like for string comparisons
 List results = session.createCriteria(Cat.class)
    .add(example)
    .list();
4

1 に答える 1

0

エンティティ フレームワークは LINQ ベースです。Linq は宣言型言語であると言われています。これは、実行方法 (命令型) ではなく、何を実行するかを指示することを意味ます。みたいな発言

context.Orders.Select(o => o.OrderDate).Distinct();

必要に応じて、 s がリストに追加されていない場合に s がリストに追加される「儀式的」foreachステートメントの宣言的ショートカットです。OrderDate

私は NHibernate やその基準 API の専門家ではありませんが、基準 API は linq よりもさらに宣言的であるようです。そのため、それらを比較することは困難です。いくつかの違い:

  • 主なもの: 例によるクエリは EF では不可能です。
  • linq でクエリ全体の動作を設定する方法はありません。たとえば、値がゼロのプロパティを除外する場合は、述語でそれぞれを指定する必要があります(これは、フィルタリング方法whereを伝えることに近い方法です)。
  • EF では、大文字と小文字の区別が完全に未発達です。たとえば、次のようなステートメント

    People.Where(c => string.Compare( c.Name, "z", false) > 0)

    と同じ SQL を生成します。

    People.Where(c => string.Compare( c.Name, "z", true) > 0)

    データベース照合は、文字列比較の大文字と小文字の区別を決定します。

  • クエリを実行できますLIKEが、繰り返しますが、個々の述語ごとに指定します。

    People.Where (c => c.Name.Contains("a"))

    (繰り返しますが、場合によっては区別しません)

したがって、基準クエリの linq 翻訳を実際に行うことはできません。個々の述語をすべて指定できるようにするには、クラスのプロパティを知っている必要があります。

于 2013-01-10T08:11:50.620 に答える