NHibernate.LINQ支持的运算符

rou*_*tic 12 linq nhibernate

我正在尝试评估NHibernate.LINQ 1.0而不实际编写任何代码.Ayende承认,与EF相比,这个版本的LINQ支持是次要的,但对于我的生活,我似乎无法找到一个页面来解释这个实现中支持和不支持的内容.例如,我可以使用Skip&Take?我不能用什么?

reb*_*ard 18

您可以查看LINQ for NHibernate示例,看看Ayende自己完成的测试是针对什么实现的,以及针对此提供者的测试.

其中一些人普遍支持:

  • 匿名类型创建. new { Person = x.Name }
  • 第一(). query.First()
  • FirstOrDefault(). query.FirstOrDefault()
  • 单(). query.Single()
  • 的SingleOrDefault(). query.SingleOrDefault()
  • 骨料(). query.Aggregate((x1,x2) => x1)
  • Contains(). query.Where(x => x.Name.Contains("Foo"))
  • 以..开始().
  • 以..结束().
  • 子串(). where db.Methods.Substring(e.FirstName, 1, 2) == "An"
  • 子查询. query.Where(x => x.Company.Id == 4)
  • 计数(). query.Where(x => x.Relatives.Count > 0)
  • 任何(). query.Any()
  • 采取(). query.Take(10)
  • 跳跃(). query.Take(10).Skip(4)
  • 排序依据(). orderby x.Name descending
  • 更换(). AfterMethod = e.FirstName.Replace("An", "Zan"),
  • CHARINDEX(). where db.Methods.CharIndex(e.FirstName, 'A') == 1
  • 指数(). where e.FirstName.IndexOf("An") == 1

问题:

  • 通过...分组
  • 加盟

我自己的一个例子:

query = NSession.Session.Linq<Catalog>()
            .Where(acc => acc.Company.Status == "A")
        .Where(acc => acc.Id.StartsWith("12-536"))
        .Where(acc => acc.Id.EndsWith("92") || acc.Id.EndsWith("67"))
        .Take(10).OrderBy(acc => acc.Title);
Run Code Online (Sandbox Code Playgroud)

如果你的生产应用程序正在使用最新的稳定版本2.1.2.4,就像我一样,你会遇到NHibernate.Linq提供商给我们的东西,直到NHibernate 3.0(trunk)得到一个稳定的版本,我们觉得安全到足以使用它主要应用.在那之前,我对NHibernate.Linq和HQL的混合物感到非常满意.