标签: queryover

NHibernate - 没有映射的连接

我知道在这里这里已经提出类似的问题,它可能是重复的.

但这个问题在两个地方都没有得到妥善解答,所以我不得不再问:(

问题是,当它们之间没有可用的映射时,您可以使用Criteria API来连接两个表.

例如

class Order{ UserId , OrderId} 
 class User{UserId , UserName}
Run Code Online (Sandbox Code Playgroud)

我需要生成一个查询,如,

select user.UserName , order.OrderId from Order order join User user on order.UserId = user.UserId
Run Code Online (Sandbox Code Playgroud)

如果有人知道这一点,请帮助..请注意我需要使用Criteria或QueryOver技术

谢谢/ BB

nhibernate join criteria queryover

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

NHibernate QueryOver可以使用MultiQuery吗?

session.CreateMultiQuery().Add(...) 接受IQuery,但IQueryOver似乎不从IQuery继承.

对我来说似乎很奇怪,我无法在多个查询中使用QueryOver?

nhibernate multi-query queryover

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

NHibernate QueryOver对变量的Restrinctions

我有一点问题:我会在QueryOver中插入一个条件来检查变量值.像这样的东西:

 var qOver = QueryOver.Of<MyModel>(() => myMod)
                .JoinAlias(() => myMod.SubMod, () => subMod, JoinType.LeftOuterJoin)
                    .Where(Restrictions.Or(
                        Restrictions.On(() => myMod.ID).IsIn(MyIDList)
                        , Restrictions.On(MyIDList == null))
Run Code Online (Sandbox Code Playgroud)

在SQL sintax中有类似的东西

WHERE @Variable = '' OR MyTable.MyField = @Variable
Run Code Online (Sandbox Code Playgroud)

所以,如果我的变量已填满,我将过滤我的字段.如果我的变量为空(或为空),我将选择每个记录而不过滤任何内容.

如何使用QueryOver和Restrinctions达到此结果?谢谢!

nhibernate restrictions queryover

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

QueryOver的子查询

我在使用带查询的子查询时遇到问题.

这就是我所拥有的

      var address = QueryOver.Of<Address>()
            .Where(x => x.City.IsLike("%" + city + "%")).Select(x => x.Person.Id);

        var result = Session.QueryOver<Person>()
            .Where(x => x.Type.IsLike(type + "%"))
            .And(x => x.Name.IsLike("%" + name + "%"))
            .WithSubquery.WhereExists(address);
Run Code Online (Sandbox Code Playgroud)

我有一个人的桌子,一个人有多个地方.

所以人的身份,姓名,类型

和地址将有PersonId和城市等.

因此,想要按名称和类型以及地址表中的城市搜索某个人

c# nhibernate subquery queryover

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

NHibernate QueryOver,Projections和Aliases

我有一个nhibernate问题,我正在投影sql Coalesce函数.

我正在比较来自两个不同实体的两个具有相同名称的字符串属性.在生成的sql中,仅比较来自第一个实体的相同属性:

var list = Projections.ProjectionList();
list.Add(
   Projections.SqlFunction("Coalesce",
    NHibernateUtil.String,
    Projections.Property<TranslatedText>(tt => tt.ItemText),
    Projections.Property<TextItem>(ti => ti.ItemText)));

var q = Session.QueryOver<TextItem>()
    .Left.JoinQueryOver(ti => ti.TranslatedItems);
Run Code Online (Sandbox Code Playgroud)

在这个sql中评估q结果

coalesce(this_.ItemText, this_.ItemText)
Run Code Online (Sandbox Code Playgroud)

this_在RHS需要有一个别名表

我可以使用, Projections.Alias(Projections.Property<TranslatedText>(tt => tt.ItemText), "ttAlias")但不知道如何映射"ttAlias" JoinQueryOver.

我也可以在那里创建一个别名,但是看不到如何命名它.

TranslatedText ttAlias = null;
...
JoinQueryOver(ti => ti.TranslatedItems, () => ttAlias)
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-projections queryover

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

NHibernate QueryOver在很多表上

有一个实体Effort有一个属性List和一个属性AdType 我们有几个adTypes枚举对象和specialLists枚举对象来选择IList<Effort>

我是这样做的:

    return NHibernateSession.QueryOver<Effort>()
        .JoinQueryOver(effort => effort.AdType)
                .WhereRestrictionOn(adType => adType.Id)
                .IsIn(adTypes.Select(adt => (long)adt).ToList())
            .Clone()
            .JoinQueryOver(effort => effort.List)
                .WhereRestrictionOn(list => list.Id)
                .IsIn(specialLists.Select(sl => (long)sl).ToList())
            .List<Effort>();
Run Code Online (Sandbox Code Playgroud)

你可以看到我使用了一个没有任何描述的奇怪的Clone()方法.它很棒.

您以何种方式使用QueryOver进行此类查询?

nhibernate queryover

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

NHibernate:如何在Session.QueryOver中使用ExpandoResultTransformer

我创建了一个ExpandoResultTransformer,用于将查询结果转换为dto以在UI中使用.它看起来像这样:

  public class ExpandoResultTransformer : IResultTransformer
    {
        public object TransformTuple(object[] tuple, string[] aliases)
        {
            dynamic toReturn = new ExpandoObject();
            for (int i = 0; i < aliases.Length; i++)
            {
                ((IDictionary<string, object>)toReturn)[aliases[i]] = tuple[i];
            }
            return toReturn;
        }

        public IList TransformList(IList collection)
        {
            return collection;
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我对createSQLQuery使用它时,它可以很好地工作

var contacts = _session.CreateSQLQuery("exec up_ClientContactsView @ClientId=:clientId")
                                   .SetParameter("clientId", request.ClientId)
                                   .SetResultTransformer(new ExpandoResultTransformer())
                                   .List<dynamic>();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试对QueryOver使用它时,我遇到了麻烦.没有发送别名.所以我尝试像这样指定它们

var periodTables = _session.QueryOver<PeriodTable>()
                           .Where(x => x.ClientPolicy.Id == request.ClientPolicyId)
                           .SelectList(list => list
                              .Select(i =>i.Id).WithAlias(()=>info.PeriodTableId) !! does not work as dynamic cannot …
Run Code Online (Sandbox Code Playgroud)

nhibernate queryover

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

NHibernate QueryOver 与 WhereRestriction 作为 OR

我有这个查询,但我似乎无法找到如何将我的 WhereRestrictionOn 设置为 OR。现在它们起到 AND 的作用,但我想要一个或另一个。

var privateInfo = Session.QueryOver<ConContact>()
            .JoinAlias(c => c.PrivateInfos, () => pi)
            .WhereRestrictionOn(c => c.FirstName).IsLike(_selectedFirstLetter + "%")
            .WhereRestrictionOn(c => c.LastName).IsLike(_selectedFirstLetter + "%") // todo: change to firstname OR lastname
            .Where(c => c.Status == ContactStatus.Approved)
            .Select(
                Projections.Property("pi.Id").WithAlias(() => sri.Id),
                Projections.Property("FirstName").WithAlias(() => sri.Name), //todo: get fullname here => Add concontact object in privateinfo
                Projections.Property("pi.Address").WithAlias(() => sri.Address),
                Projections.Constant("Contact").WithAlias(() => sri.Type)
            )
            .TransformUsing(Transformers.AliasToBean<SearchResultInfo>())
            .List<SearchResultInfo>()
            .ToList();
Run Code Online (Sandbox Code Playgroud)

非常感谢任何帮助 thx!

解决方案:

var privateInfo = Session.QueryOver<ConContact>()
            .JoinAlias(c => c.PrivateInfos, () => pi)
            .Where(
                Restrictions.Disjunction() …
Run Code Online (Sandbox Code Playgroud)

nhibernate asp.net-mvc queryover

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

SQLCriterion ArgumentOutOfRangeException

创建 SQLCriterion 的正确语法是什么?

我有以下代码:

var sqlCriterion = new SQLCriterion(
                new SqlString("{alias}.Id IN (SELECT Id FROM dbo.fGetSomeIds(?1, ?2))"),
                new object[] { "param1", "param2" },
                new IType[] { NHibernateUtil.String, NHibernateUtil.String });

query.Where(sqlCriterion);
Run Code Online (Sandbox Code Playgroud)

其中查询是我的 QueryOver 实例(用 NHibernateSession 创建)

当我调用 query.List() 时,出现以下异常:

Index was out of range. Must be non-negative and less than the size of the collection parameter name:index 
Run Code Online (Sandbox Code Playgroud)

这是在 NHibernate.Criterion.SQLCriterion.ToSqlString(..)

我的 SQLCriterion 构造函数的语法是错误的还是我遗漏了其他东西?

.net c# nhibernate queryover

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

如何使用QueryOver返回通用列表

我正在尝试使用queryover进行简单的选择并获得通用列表.

我想只从表中获得username,email并且firstname,省略其余部分.

这是我的代码:

public IList<Users> GetAllByRole(string role)
{
    var users= this.Session.QueryOver<Users>()
        .where(f => f.role == role)
        .select(f => f.username)
        .select(f => f.email)
        .select(f => f.firstname)
        .list<Users>();

    return users;
}
Run Code Online (Sandbox Code Playgroud)

错误:

The value \"x\" is not of type \"Model.Poco.Entities.Users\" and cannot be used in this generic collection.\r\nParameter name: value

SQL Query就是这样的

SELECT [username]
  ,[email]
  ,[firstname]
FROM [MyDB].[dbo].[MyTable]
WHERE [role] = 'admin'
Run Code Online (Sandbox Code Playgroud)

我也试过这样的事

IList<Users> users = this.Session.QueryOver<Users>()
            .Where(p => p.role == role)
            .SelectList(list => list
                    .Select(p …
Run Code Online (Sandbox Code Playgroud)

.net c# generics nhibernate queryover

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