我需要增强C#代码的功能。我是C#的新手,但我有很强的java背景。
我的工作是编写一个新的查询,比如JDBC,从数据库中获取数据。
在下面的方法中,我没有看到任何SQL查询。
这条线是什么意思?这类似于Hibernate hql吗?
from p in Session.Query<MyObject>() select p
由于
代码:
public IPagingList<MyObject> ReadMyObjectItems(int start, int limit, IList<Filter> filters)
{
var criteria = Session.CreateCriteria<MyObject>();
if (limit != -1)
{
criteria.SetMaxResults(limit);
criteria.SetFirstResult(start);
}
if (filters != null)
{
foreach (var filter in filters)
{
criteria.Add(Restrictions.InsensitiveLike(filter.Field, "%" + filter.Value + "%"));
}
}
IList<MyObject> report = criteria.List<MyObject>();
int total = (from p in Session.Query<MyObject>() select p).Count();
var pagedResults = new PagingList<MyObject> { List = report, Total = total };
return pagedResults;
}
答案 0 :(得分:1)
似乎项目正在使用像NHibernate这样的ORM。您可以在此处获取更多详细信息:http://nhibernate.info
答案 1 :(得分:1)
(from p in Session.Query<MyObject>() select p).Count();
我们只是计算所有对象。
将此重构为
Session.Query<MyObject>().Count()
。它更容易阅读,在这种情况下,LINQ是不必要的。
答案 2 :(得分:1)
这是Linq语法。一种强大的查询形式,并入.Net和不同的.Net框架 在你的情况下,似乎你正在使用NHibernate,并且该行正在使用NHibernate Linq。 (但是周围的代码正在使用Criteria。)
要在NHibernate中编写查询,您可以选择使用
所有都有不同的利弊 要么由NHibernate翻译成SQL。当您尝试访问它时,将获取实际结果,例如读取结果中的项目或将结果转换为List等。