标签: queryover

JoinQueryOver和JoinAlias有什么区别?

我需要知道JoinQueryOver和JoinAlias之间的区别是什么,以及何时使用它们?

谢谢.

nhibernate queryover

86
推荐指数
2
解决办法
3万
查看次数

查询和(x像'a'或y喜欢'a')

嗨当我使用查询转换API时,是否有任何优雅的方式组合'喜欢'和'或'?对于'喜欢'有类似的东西:

 query.WhereRestrictionOn(x=>x.Code).IsLike(codePart)
Run Code Online (Sandbox Code Playgroud)

对于'或'我可以做类似的事情:

query.Where( x=>x.Code == codePart || x.Description== codePart)
Run Code Online (Sandbox Code Playgroud)

但是如何创建这样的查询:

select*from n,其中代码如'%abc%'或描述如'%abc%'

nhibernate queryover

50
推荐指数
3
解决办法
2万
查看次数

如何使用nHibernate和QueryOver API获得明显的结果?

我有这个Repository方法

    public IList<Message> ListMessagesBy(string text, IList<Tag> tags, int pageIndex, out int count, out int pageSize)
    {
        pageSize = 10;
        var likeString = string.Format("%{0}%", text);
        var query = session.QueryOver<Message>()
            .Where(Restrictions.On<Message>(m => m.Text).IsLike(likeString) || 
            Restrictions.On<Message>(m => m.Fullname).IsLike(likeString));

        if (tags.Count > 0)
        {
            var tagIds = tags.Select(t => t.Id).ToList();
            query
                .JoinQueryOver<Tag>(m => m.Tags)
                .WhereRestrictionOn(t => t.Id).IsInG(tagIds);
        }            

        count = 0;
        if(pageIndex < 0)
        {
            count = query.ToRowCountQuery().FutureValue<int>().Value;
            pageIndex = 0;
        }
        return query.OrderBy(m => m.Created).Desc.Skip(pageIndex * pageSize).Take(pageSize).List();
    }
Run Code Online (Sandbox Code Playgroud)

您提供自由文本搜索字符串和标签列表.问题是,如果邮件有多个标签,则会列出重复的时间.我想要一个基于Message实体的独特结果.我看了看

Projections.Distinct
Run Code Online (Sandbox Code Playgroud)

但它需要一个属性列表来处理不同的问题.这条消息是我的实体根,大部分是在不提供所有实体属性的情况下获得此行为的方法吗?

提前谢谢,安德斯

c# nhibernate queryover

48
推荐指数
3
解决办法
4万
查看次数

使用带有WHERE IN的QueryOver的NHibernate

我会像这样创建一个QueryOver

SELECT *
FROM Table
WHERE Field IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我尝试过Contains方法,但我遇到了异常

"System.Exception:无法识别的方法调用:System.String:Boolean包含(System.String)"

在这里我的代码

var qOver = _HibSession.QueryOver<MyModel>(() => baseModel)                                                                
  .JoinAlias(() => baseModel.Submodels, () => subModels)
  .Where(() => subModels.ID.Contains(IDsSubModels))
  .List<MyModel>();
Run Code Online (Sandbox Code Playgroud)

c# nhibernate where-in queryover

47
推荐指数
3
解决办法
5万
查看次数

如何使用NHibernate QueryOver重新创建这个复杂的SQL查询?

想象一下以下(简化)数据库布局: 数据库布局

我们有许多"假期"记录,涉及在特定日期前往特定住宿等.

我想从数据库中提取每个住宿的"最佳"假期(即最低价格),给定一组搜索标准(例如持续时间,出发机场等).

将有多个具有相同价格的记录,因此我们需要选择保存(降序),然后按出发日期升序.

我可以写SQL来做这个看起来像这样(我不是说这必然是最优化的方式):

SELECT *
FROM Holiday h1 INNER JOIN (

    SELECT  h2.HolidayID,
        h2.AccommodationID,
        ROW_NUMBER() OVER (
            PARTITION BY h2.AccommodationID
            ORDER BY OfferSaving DESC
        ) AS RowNum
    FROM Holiday h2 INNER JOIN (

        SELECT  AccommodationID,
            MIN(price) as MinPrice
        FROM Holiday
        WHERE TradeNameID = 58001
        /*** Other Criteria Here ***/
        GROUP BY AccommodationID

    ) mp
    ON mp.AccommodationID = h2.AccommodationID
    AND mp.MinPrice = h2.price
    WHERE TradeNameID = 58001
    /*** Other Criteria Here ***/

) x on h1.HolidayID = x.HolidayID and …
Run Code Online (Sandbox Code Playgroud)

nhibernate subquery queryover

41
推荐指数
1
解决办法
2192
查看次数

急切地获取多个集合属性(使用QueryOver/Linq)?

我发现了2个类似的问题:

根据这个页面:

注意不要急于同时获取多个集合属性.虽然这个声明可以正常工作:

var employees = session.Query<Employee>()
    .Fetch(e => e.Subordinates)
    .Fetch(e => e.Orders).ToList();
Run Code Online (Sandbox Code Playgroud)

它对数据库执行笛卡尔积产品查询,因此返回的总行数将是总下属乘以总订单数.

可以说我有以下型号:

public class Person
{
    public virtual int Id { get; private set; }
    public virtual ICollection<Book> Books { get; set; }
    public virtual ICollection<Article> Articles { get; set; }
    public virtual ICollection<Address> Addresses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用QueryOver/Linq(不返回笛卡尔积),急切地使用书籍,文章和地址加载所有人的最简单方法是什么?

谢谢


更新:

cremor回答下面和弗洛里安林回答这个线程.以下代码很好地工作,只有一次往返数据库.

var persons = session.QueryOver<Person>()
    .Future<Person>();
var persons2 = session.QueryOver<Person>() …
Run Code Online (Sandbox Code Playgroud)

nhibernate linq-to-nhibernate queryover

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

如何使用NHibernate QueryOver api获取行数?

我正在使用作为NHibernate 3.x一部分的QueryOver api.我想得到一个行计数,但我正在使用的方法返回所有对象,然后获取集合的计数.有没有办法只返回行数的整数/长值?

我目前正在使用:

_session.QueryOver<MyObject>().Future().Count()
Run Code Online (Sandbox Code Playgroud)

nhibernate rowcount queryover

29
推荐指数
4
解决办法
2万
查看次数

NHibernate 3.0:没有使用QueryOver的FirstOrDefault()?

我正在使用FluentNHibernate和NH 3.0,使用LINQ提供程序和新的QueryOver语法.

现在使用QueryOver我想得到一个项目(称为结果),其时间戳值尽可能接近给定值,但不是更大:

 Result precedingOrMatchingResult = Session.QueryOver<Result>().
        Where(r => r.TimeStamp < timeStamp).
        OrderBy(r => r.TimeStamp).Desc.                
        FirstOrDefault(); //get the preceding or matching result, if there is any
Run Code Online (Sandbox Code Playgroud)

现在,Intellisense告诉我,没有一种FirstOrDefault()方法.当然,我可以枚举我的有序查询,然后使用LINQ获取我的项目.但这会首先将所有项目加载到内存中.

有没有替代FirstOrDefault(),或者我理解完全错误的东西?

linq nhibernate linq-to-nhibernate queryover

29
推荐指数
4
解决办法
2万
查看次数

如何使用注释创建hibernate组合键

我试图用于hibernate annotations将数据插入到MySQL database没有定义主键的表中.

但事实上,该表的2个字段在表中是唯一的.我可以使用hibernate注释实现相同吗?

这是我的代码..

 @Entity
 @Table(name = "RolesMenuItems")
    public class RolesMenuItems {

       @Column(name = "RoleID")
       private String roleID;

       @Column(name = "MenuItemID")
       private String menuItemID;
  /*setter getter methods */
 }
Run Code Online (Sandbox Code Playgroud)

hibernate hibernate-mapping hibernate-annotations queryover

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

QueryOver或子查询

我使用子查询获得以下NHibernate查询:

NHContext.Session.QueryOver<Item>()
            .WithSubquery.WhereProperty(x => x.ItemId).In(QueryOver.Of<Foo>().Where(x => x.AFlag).Select(x => x.ItemId))
            .WithSubquery.WhereProperty(x => x.ItemId).In(QueryOver.Of<Bar>().Where(x => x.AFlag).Select(x => x.Item))  
            .Future<Item>();
Run Code Online (Sandbox Code Playgroud)

这将运行以下SQL:

SELECT *
FROM   item this_
WHERE  this_.ItemId in (SELECT this_0_.ItemId as y0_
                            FROM   Foo this_0_
                            WHERE  this_0_.AFlag = 1 /* @p0 */)
and    this_.ItemId in (SELECT this_0_.ItemId as y0_
                            FROM   Bar this_0_
                            WHERE  this_0_.AFlag = 1 /* @p0 */)
Run Code Online (Sandbox Code Playgroud)

我希望它使用OR,例如:

SELECT *
FROM   item this_
WHERE  this_.ItemId in (SELECT this_0_.ItemId as y0_
                            FROM   Foo this_0_
                            WHERE  this_0_.AFlag = 1 /* …
Run Code Online (Sandbox Code Playgroud)

nhibernate queryover

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