标签: queryover

nhibernate queryOver投影语法

我正在尝试从NH 3.0 Cookbook中获取一些代码,并想知道为什么我无法获得下面的代码来编译.我认为应该使这个工作的QueryProjectionBuilder在"NHibernate.Criterion.Lambda"中,但它的using指令没有帮助.

问题是SelectGroup和SelectAvg部分.假设书中的语法是正确的,那么有人可以看到缺少的参考吗?

namespace Queries.Implementations
{
using System;
using System.Collections.Generic;
using System.Linq;
using Eg.Core;
using NHibernate;
using NHibernate.Criterion;
using NHibernate.Criterion.Lambda;

    public class QueryOverQueries : CookbookQueriesBase
    {

        public override IEnumerable<NameAndPrice> GetAvgDirectorPrice(ISession session) {
            return _session.QueryOver<Movie>()
                .Select(list => list
                                    .SelectGroup(m => m.Director)
                                    .SelectAvg(m => m.UnitPrice)
                )
                .List<object[]>()
                .Select(props =>
                        new NameAndPrice
                        {
                            Name = (string) props[0],
                            Price = (decimal) props[1]
                        });

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# nhibernate projection queryover

7
推荐指数
1
解决办法
5409
查看次数

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)
                .TransformUsing(Transformers.DistinctRootEntity);
        }                        

        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)

我试过了两个

.TransformUsing(Transformers.DistinctRootEntity);
Run Code Online (Sandbox Code Playgroud)

和 …

c# hibernate distinct queryover

7
推荐指数
1
解决办法
2158
查看次数

NHIbernate:投影所有属性的捷径?

我正在尝试按以下方式生成SQL:

SELECT 
  t.*, 
  SELECT (...)
FROM Title t
[trimmed]
Run Code Online (Sandbox Code Playgroud)

使用QueryOver

Title title = null;

var q = session
   .QueryOver(() => title)
   .Select(
      Projections.Alias(Projections.Property<Title>(t => t.Id), "Id"),
      Projections.Alias(Projections.Property<Title>(t => t.Name), "Name"),
      ....
      Projections.SubQuery(sq.Where(tt => tt.Id == title.Id))), "TopLevelGenre")
)
[code trimmed]
Run Code Online (Sandbox Code Playgroud)

Title中有15个属性我想要投射.是否有一种更简单的方法可以让我不必单独预测每个属性,就像我上面开始做的那样?

nhibernate icriteria queryover

7
推荐指数
1
解决办法
1497
查看次数

具有Join和Distinct的QueryOver

我使用以下QueryOver:

var query = searchTermRepository.GetAllOver()
     .Where(Restrictions.On<Entities.SearchTerm>(c => c.Text).IsLike(filter.Value, MatchMode.Start))
     .Select(Projections.Distinct(Projections.Property<Entities.SearchTerm>(x => x.Contact)))
     .Inner.JoinQueryOver(x => x.Contact).Take(100);
Run Code Online (Sandbox Code Playgroud)

这会创建:

SELECT distinct TOP ( 100 /* @p0 */ ) this_.ContactId as y0_
FROM   SearchTerm this_
       inner join Contact contact1_
         on this_.ContactId = contact1_.Id
       left outer join Company contact1_1_
         on contact1_.Id = contact1_1_.Id
       left outer join Person contact1_2_
         on contact1_.Id = contact1_2_.Id
       left outer join Branch contact1_3_
         on contact1_.Id = contact1_3_.Id
       left outer join ContactGroup contact1_4_
         on contact1_.Id = contact1_4_.Id
WHERE  this_.Text like 'koc%%' /* …
Run Code Online (Sandbox Code Playgroud)

nhibernate join distinct queryover

7
推荐指数
1
解决办法
6727
查看次数

如何将属性值转换合并到NHibernate QueryOver .SelectList?

我希望将属性值转换合并到我的QueryOver查询中.

我喜欢在查询对象模式之后编写查询,直接生成MVC视图模型.在我的视图模型中,我尝试使用尽可能简单的属性类型,将转换复杂性保留在视图和控制器之外.这意味着有时候,我需要将一种类型转换为另一种类型,例如将日期转换为字符串.

有人可能会争辩说,这种转换应该在视图中执行,但由于我的大多数视图模型都直接转换为JSON对象,这会导致转换变得更加麻烦.在JavaScript中执行日期到字符串转换充其量是有问题的,我的JSON转换器不够灵活.

这是我正在做的一个例子:

// Entity.
public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTimeOffset DateCreated { get; set; }
}

// View model.
public class CustomerViewModel
{
    public string Name { get; set; }
    public string DateCreated { get; set; } // Note the string type here.
}

// Query.
CustomerViewModel model = null;

List<CustomerViewModel> result = Session.QueryOver<Customer>()
    .SelectList(list => list
        .Select(n => n.Name).WithAlias(() => model.Name)
        .Select(n => …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate asp.net-mvc queryover

7
推荐指数
1
解决办法
6421
查看次数

流利的nHibernate QueryOver SQL'CASE'等效

基本上我想要做的就是编写这段SQL:

SELECT
CASE
    WHEN t.type = 'a' THEN
        t.name
    ELSE
        t.otherName
    END
    as "Name"
FROM myTable t
Run Code Online (Sandbox Code Playgroud)

在QueryOver中

sql case fluent-nhibernate queryover

7
推荐指数
1
解决办法
3483
查看次数

nhibernate queryover LIKE with expression trees

我想在我的基础存储库类中添加一个方法,允许我使用LIKE表达式,但我不太清楚如何解决这个问题.我想创建一个通用方法,查看传入的表达式树,并在传入的字符串值中查找通配符.然后,它将相应地生成QueryOver语句.

我目前有以下内容:

public IList<T> FindAll(Expression<Func<T, bool>> criteria, char wildCard)
{
    return SessionFactory.GetCurrentSession()
            .QueryOver<T>()
            .Where(criteria)
            .List();
}
Run Code Online (Sandbox Code Playgroud)

显然,困难的部分尚未到来.我需要查看表达式树并QueryOver动态构建查询.寻找关于如何继续这一点的一些指示.或者我只是在这里浪费时间,应该在我的存储库中创建处理LIKE查询的单个方法?

附加标准

理想情况下,我想区分以下内容:

  • 搜索*
  • *搜索
  • *搜索*

所以生成的查询将是:

  • 字段LIKE'search%'
  • 字段LIKE'%search'
  • 字段LIKE'%search%'

c# nhibernate queryover

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

QueryOver语句,用于选择具有降序DateTime顺序的N行

我正在尝试编写QueryOver语句,以按降序时间顺序选择N行.

session.QueryOver<T>().Take(10).OrderBy(x=>x.DateInserted);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这根本不起作用.有什么方法可以解决它吗?

nhibernate linq-to-nhibernate nhibernate-criteria queryover

7
推荐指数
1
解决办法
5257
查看次数

Nhibernate QueryOver.OrderBy使用字符串属性名称.

我重构旧式查询CreateCriteria()QueryOver().我的Wcf服务获取string PropertyName订单查询结果.对于IQueryable我使用动态LINQ做这样的排序,为CreateCriteria()- AddOrder().

IList<object[]> result =
            GetSession()
                .QueryOver(() => activity)
                .JoinAlias(() => activity.ActivityLicense, () => license)
                .Select(Projections.ProjectionList()
                            .Add(Projections.Count<Activity>(e => e.Id), "ActivityCount")
                            .Add(Projections.Group(() => license.SerialNumber), "SerialNumber")
                            .Add(Projections.Count<Activity>(e => e.MacAdress), "MacAddressCount")
                            .Add(Projections.Count<Activity>(e => e.IpAdress), "IpAddressCount")
                )
                .OrderByAlias("ActivityCount") // Compilation Error - I need such extension method
                .List<object[]>();
Run Code Online (Sandbox Code Playgroud)

有关字符串属性名称如何排序的任何建议?

PS:我无法使用LINQ到Nhibernate:LINQ to NHibernate - .GroupBy().Skip().Take()导致异常

谢谢!

nhibernate nhibernate-criteria queryover

7
推荐指数
1
解决办法
7651
查看次数

nhibernate查询与非相关实体的复杂连接

所以我花了最后几个小时寻找答案,我似乎找不到任何有意义的东西.

public class Game
{
   public virtual Guid ID { get; set; }
   public virtual ResultStructure Structure { get; set; }
   public virtual List<Result> Results { get; set; }
}

public class Result
{
  public virtual Player Player { get; set; }
  public virtual int Position { get; set; }
}

public class ResultStructure
{
  public virtual Guid ID { get; set; }
  public virtual List<ResultOutcomes> Outcomes { get; set;}
}

public class ResultOutcomes
{
  public virtual int Position { …
Run Code Online (Sandbox Code Playgroud)

c# linq nhibernate queryover

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