0

我需要增强 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;

        }
4

3 回答 3

1

(from p in Session.Query<MyObject>() select p).Count();

We are simply getting a count of all the objects.

Refactor this to

Session.Query<MyObject>().Count(). It's easier to read and in this case LINQ is unnecessary.

于 2012-04-30T19:40:22.947 回答
1

这是Linq语法。一种强大的查询形式并入 .Net 和不同的 .Net 框架。
在您的情况下,您似乎正在使用 NHibernate,而该行正在使用 NHibernate Linq。(但周围的代码正在使用 Criteria。)

对于在 NHibernate 中编写查询,您可以选择使用

  • 林克
  • 高品质
  • 标准

它们都有不同的优点和缺点。
NHibernate 将把其中任何一个翻译成 SQL。当您尝试访问它时将获取实际结果,例如读取结果中的项目或将结果转换为列表等。

于 2012-04-30T20:53:49.320 回答
1

似乎该项目正在使用像 NHibernate 这样的 ORM。您可以在此处获取更多详细信息:http: //nhibernate.info

于 2012-04-30T19:35:54.990 回答