C#从数据库中获取数据

时间:2012-04-30 19:33:33

标签: c# linq ado.net

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

        }

3 个答案:

答案 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中编写查询,您可以选择使用

  • LINQ的
  • HQL
  • 标准

所有都有不同的利弊 要么由NHibernate翻译成SQL。当您尝试访问它时,将获取实际结果,例如读取结果中的项目或将结果转换为List等。