Здраствуйте! Перейду сразу к делу: как создать запрос по определенному критерию с использованием NHibernate и БД SQL?
Например у меня есть класс Customer. Так вот, я хочу, например, извлеч из БД Customers все города у которых поле City "Лондон"?
Я писал вот так, но выдает ошибку. Использую Visual Studio 2008 и SQL Server Express 2005.
IList<Customer> a = ses2.CreateQuery("SELECT * FROM dbo.Customers").List<Customer>();
ICriteria crit = ses2.CreateCriteria(typeof(Customer))
.Add(Expression.Eq("Customers.City", "London"));
IList<Customer> aa = crit.List<Customer>();
Здравствуйте, yozhik89, Вы писали:
Y>Я писал вот так, но выдает ошибку. Использую Visual Studio 2008 и SQL Server Express 2005.
Ошибку зря не приводите, сами-то читали? Она может быть не в коде, но в коде тоже есть.
Y>Y> IList<Customer> a = ses2.CreateQuery("from Customer").List<Customer>(); // это HQL
Y> ICriteria crit = ses2.CreateCriteria(typeof(Customer))
Y> .Add(Expression.Eq("City", "London")); // что это свойство кастомера он сам догадается
Y> IList<Customer> aa = crit.List<Customer>();
Y>
... << RSDN@Home 1.2.0 alpha 4 rev. 1176>>
Здравствуйте, Ziaw, спасибо за помощь, но к сожалению у меня етот пример не работает тоже.
Вы писали:
Y>>Y>> IList<Customer> a = ses2.CreateQuery("from Customer").List<Customer>(); // это HQL
Y>> ICriteria crit = ses2.CreateCriteria(typeof(Customer))
Y>> .Add(Expression.Eq("City", "London")); // что это свойство кастомера он сам догадается
Y>> IList<Customer> aa = crit.List<Customer>();
Y>>
так вот на
.Add(Expression.Eq("City", "London"));
компилятор выдает такую ошибку:
Error 1 The name 'Expression' does not exist in the current context
но референс на NHibernate я добавил в проект и
using NHibernate
тоже добавил, но, как я понял, дело в том, что у меня просто нет вот такой функции: Expression.Eq("
City", "London"));
Я долго бился и искал и вот тепер понял — вот решение етой проблемы:
NHibernate.Expression.EqExpression eq = new NHibernate.Expression.EqExpression("Region", "SP"); //обьявляем критерий, который будем добавлять
ICriteria cr = ses2.CreateCriteria(typeof(Customer)); //тип нашего класса
cr.Add(eq); //добавляем созданый критерий eq
IList<Customer> aa = cr.List<Customer>(); // возвращяем список найденых записей, где поле Customer.Region имеет значение "SP"
foreach (Customer cust in aa)
{
Console.WriteLine(cust.Region + " " + cust.CompanyName); //выводим все ето на екран для очистки совести:))
}
Просто видимо у меня новая версия енхибернейт и пришлось вот так повозится. Надеюсь кому то пригодится мое решение.
Здравствуйте, Ахмед. У меня такого неймспейса нет, хз