标签: queryover

帮助QueryOver和WhereExists

我有个问题.我有人和猫.每个Person都有一些Cats(Cats中有一个外键指向Persons中的主键).每只猫都有一个年龄.我想选择有"老"猫的人.我想要这些人的所有猫,而不仅仅是"老"猫.我需要使用QueryOver语法来完成它.

在T-SQL中它将是这样的:

SELECT P.*, C.*
FROM Persons P
LEFT JOIN Cats C
    ON P.Id = C.OwnerId
WHERE EXISTS (
    SELECT 1
    FROM Cats C2
    WHERE P.Id = C2.OwnerId AND C2.Age > 5)
Run Code Online (Sandbox Code Playgroud)

我知道我必须使用子查询,并且我可以轻松地使用"旧的"nhibernate语法(Criteria/DetachedCriteria),但我无法在QueryOver语法中执行此操作.

我不想要"IN"状态.我的主键是一个复杂的键,所以我无法使用IN.

var persons = session.QueryOver<Person>.WithSubquery.WhereExists( ??? );
Run Code Online (Sandbox Code Playgroud)

c# nhibernate fluent-nhibernate queryover

12
推荐指数
1
解决办法
7479
查看次数

如何使用nhibernate查询"选择"

我想使用查询来给我一个对象

 public class TaskMap : ClassMap<Task>
    {
        public TaskMap()
        {
            Table("Tasks");
            Id(x => x.TaskId);
            Map(x => x.TaskName).NvarcharWithMaxSize().Not.Nullable();
            Map(x => x.Description).NvarcharWithMaxSize();
            Map(x => x.DueDate).Not.Nullable();
            HasMany(x => x.PersonalTaskReminders).Inverse();
            HasMany(x => x.TaskReminders).Inverse();
            References(x => x.Course).Not.Nullable();
            HasMany(x => x.CompletedTasks);

        }
    }



[Serializable()]
public class Task
{
    public virtual int TaskId { get; private set; }
    public virtual string TaskName { get;  set; }
    public virtual string Description { get; set; }
    public virtual DateTime DueDate { get; set; }
    public virtual IList<PersonalTaskReminder> PersonalTaskReminders { …
Run Code Online (Sandbox Code Playgroud)

nhibernate queryover

12
推荐指数
1
解决办法
2万
查看次数

简单的QueryOver:无法识别的方法调用

我有一个简单的QueryOver

var q = SessionInstance.QueryOver<Person>().Where(p => p.Number.Equals(number));
Run Code Online (Sandbox Code Playgroud)

数字字段类型为int.此消息的此查询有运行时错误:

无法识别的方法调用:System.Int32:Boolean Equals(Int32)

c# nhibernate queryover

12
推荐指数
1
解决办法
5934
查看次数

查询,其中id不在列表中

我一直在努力解决这个问题,所以我希望你们中的一些QueryOver专家可以提供帮助.

我有一个博客帖子列表.您可以在每篇博文上投票,我希望(除其他外)收到用户尚未投票的帖子列表.

首先我想做的事情如下:

Session.QueryOver<BlogPost>()
.WhereRestrictionOn(bp => bp.Id)
.NotIn(existingBlogPostVotes);
Run Code Online (Sandbox Code Playgroud)

(existingBlogPostVoteIds是投票博客帖子的ID)

但是在QueryOver框架中不存在这种情况.

我发现我可以在Criteria中这样做:

var crit =
     Session.CreateCriteria<BlogPost>()
     .Add(Restrictions.Not(Restrictions.In("Id",existingBlogPostVotes)));
Run Code Online (Sandbox Code Playgroud)

但我想在QueryOver而不是Criteria中这样做.

如何在QueryOver中完成?

nhibernate queryover

12
推荐指数
1
解决办法
9023
查看次数

如何在nhibernate queryover中选择引用的实体

我有一个具有引用其他实体的属性的实体(示例中为ReferenceEntity).

使用HQL,我可以这样做:

select e.ReferenceEntity from Entity e where e.Id = :entityId
Run Code Online (Sandbox Code Playgroud)

NHibernate会给我一个没有懒惰的ReferenceEntity实例.

通过im尝试查询执行此操作:

Session.QueryOver<Entity>()
.Where(e => e.Id == entityId)
.Select(e => e.ReferenceEntity)
.SingleOrDefault<ReferenceEntity>()
Run Code Online (Sandbox Code Playgroud)

使用QueryOver Nhibernate给了我ReferenceEntity但是懒惰.

我想通过查询来获得ReferenceEntity和eager加载,就像我使用hql一样.

谢谢

nhibernate select lazy-loading eager-loading queryover

11
推荐指数
1
解决办法
5479
查看次数

复杂的nHibernate QueryOver表达式

我在层次结构中有以下对象A > B > C > D.每个对象都映射到一个表.我正在尝试使用QueryOver编写以下SQL:

SELECT B
FROM A, B, C, D
WHERE A.ID = B.ID
  AND B.ID = C.ID
  AND C.ID = D.ID
WHERE A.NUMBER = 'VALUE'
  AND D.NAME IN ('VALUE1', 'VALUE2')
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有C#代码:

string[] entityNames = entityAttributes.Select(e => e.Name).ToArray();
string customerNumber = 2;

return session.QueryOver<B>()
              .JoinQueryOver(b => b.C)
              .JoinQueryOver(c => c.D)
              .WhereRestrictionOn(d => d.Name).IsIn(entityNames)
              .List<B>();
Run Code Online (Sandbox Code Playgroud)

这里缺少的是A > B链接.我无法弄清楚如何添加连接以A限制它在NUMBER字段上.我尝试了以下但是.JoinQueryOver(b => b.C)正在寻找类型A而不是寻找类型B.

return session.QueryOver<B>()
                .JoinQueryOver(b …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate queryover

11
推荐指数
1
解决办法
7119
查看次数

Nhibernate + QueryOver:过滤忽略敏感的地方

我正在尝试使用QueryOver在nHibernate中构建一个简单的查询,但我希望它将所有内容转换为小写或忽略敏感:

Domain.User User = Session.QueryOver<Domain.User>()
       .Where(x=>x.Login=="username")
       .SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

更新:

有人建议问题可能在于DB的收集,但我从来没有遇到任何问题,这个脚本有效:

Domain.User User = Session
    .CreateCriteria<Domain.User>() 
    .Add(Expression.Eq("Login", "username")) 
    .UniqueResult<Domain.User>(); 
Run Code Online (Sandbox Code Playgroud)

c# nhibernate queryover

10
推荐指数
2
解决办法
9825
查看次数

nhibernate queryover与子查询连接以获取聚合列

我一直在寻找几个小时如何做到这一点,但似乎找不到任何帮助我.

这是数据库模型:

在此输入图像描述

这是我尝试运行的SQL查询:

SELECT b.*, a.Assignments FROM Branch b LEFT JOIN (
        SELECT b.BranchID , COUNT(ab.BranchID) AS Assignments
        FROM Branch b LEFT JOIN AssignmentBranch ab ON b.BranchID = ab.BranchID
        GROUP BY b.BranchID
      ) a ON b.BranchID = a.BranchID
Run Code Online (Sandbox Code Playgroud)

所以,基本上,我想返回一个分支列表和一个新列,表示该分支的赋值数.

分支模型

public class Branch : IEntity<int>
{
    public virtual int ID
    {
        get;
        set;
    }

    public virtual string Name { get; set; }

    public virtual IList<AssignmentBranch> Assignments { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

AssignmentBranch模型

public class AssignmentBranch : IEntity<int>
{
    public virtual …
Run Code Online (Sandbox Code Playgroud)

nhibernate subquery queryover

10
推荐指数
1
解决办法
1万
查看次数

使用Moq模拟nHibernate QueryOver

测试时,以下行以空引用失败:

var awards = _session.QueryOver<Body>().Where(x => x.BusinessId == (int)business).List();
Run Code Online (Sandbox Code Playgroud)

我的测试是这样的:

var mockQueryOver = new Mock<IQueryOver<Body, Body>>();
mockQueryOver.Setup(q => q.List()).Returns(new List<Body> {_awardingBody});
_mockSession.Setup(c => c.QueryOver<Body>()).Returns((mockQueryOver.Object));
_mockCommandRunner = new Mock<ICommandRunner>();
_generator = new CertificateGeneratorForOpenSSLCommandLine(_mockSession.Object, _mockCommandRunner.Object, _mockDirectory.Object, _mockFile.Object, _mockConfig.Object); 
Run Code Online (Sandbox Code Playgroud)

说实话,我在黑暗中徘徊 - 我对nHibernate和Moq相对较新,所以我不太确定要google什么才能获得正确的信息.

c# nhibernate unit-testing moq queryover

10
推荐指数
1
解决办法
4908
查看次数

nhibernate queryover使用where-or子句加入别名

我只是发布代码:

public IList<Dish> GetByNameDishTypes(IEnumerable<string> names,
    IEnumerable<string> dishTypes)
{
    // return dishes (ie food) whose name is in the names enumerable,
    // or whose type is in the dish types enumerables
    // (this would be 'breakfast', 'dinner') ..

    var namesArr = names != null ? names.ToArray() : new string[0];
    var dishTypesArr = dishTypes != null ? dishTypes.ToArray() : new string[0];

    var criteria = this.Session.CreateCriteria<Dish>();
    criteria.CreateAlias("DishType", "dt");
    criteria.Add(
        Restrictions.Or
        (
            Restrictions.In("Name", namesArr),
            Restrictions.In("dt.Name", dishTypesArr)
        ));

    return criteria.List<Dish>();

    /* get this to work? …
Run Code Online (Sandbox Code Playgroud)

nhibernate alias join queryover

10
推荐指数
1
解决办法
2万
查看次数