Метод Entity Framework для запроса на основе полного объекта

How can I achieve following query method in Entity Framework, below is a snippet from NHibernate documentation http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html

 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();
0
nl ja de

1 ответы

Структура Entity основана на LINQ. Linq называется декларативным языком, что означает столько, сколько говорить , что делать вместо , как делать это (обязательно). Заявление вроде

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

это декларативный ярлык, если хотите, для выражения 'церемониальный' foreach , в котором OrderDate s добавляются в список, если они ранее не были добавлены к нему.

Я не являюсь экспертом в NHibernate или его API критериев, но критерии API, похоже, еще более декларативные, чем linq. Это затрудняет их сравнение. Несколько отличий:

  • The main one: query by example is not possible in EF.
  • There is no way in linq to set behaviours for a whole query. For instance, if you want to exclude zero valued properties, you'll have to specify each one of them in a where predicate (which is closer to telling how to filter).
  • Case sensitivity is downright underdeveloped in EF. For example, a statement like

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

    will generate the same SQL as

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

    The database collation determines the case sensitiveness of string comparisons.

  • You can do LIKE queries, but, again, specified for each individual predicate:

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

    (again: no differentiation in case)

Поэтому я не могу дать перевод запроса по критериям linq. Я должен знать свойства класса, чтобы иметь возможность указывать все индивидуальные предикаты.

0
добавлено
SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)