如何应用 IQueryOverIQueryOver 的方法?

发布于 2025-01-17 20:49:06 字数 1646 浏览 3 评论 0原文

我正在使用接口Iqueryover包装查询。感谢基础有限的,我可以访问标准。

我想使用诸如take,skip的iQueryover方法...

我的目的是要适用一个func列表,在这种情况下

public IQueryOver QueryOver { get; set; }

/// <summary>
/// Set paging (before querying!)
/// </summary>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
public void Paging(int pageNumber, int pageSize)
{
    if (pageNumber > 0 && pageSize > 0)
    {
        _pageSize = pageSize;
        _pageNumber = pageNumber;

        NHibernate.ICriteria paging(IQueryOver str) => str.UnderlyingCriteria.SetFirstResult(pageSize * (pageNumber - 1)).SetMaxResults(pageSize);

        _funcs.Add(paging);
    }
}

,我有一个我想包装列表

public IList<T> List()
{
    IList<T> result = null;
    try
    {
        BeginTransaction();
        try
        {
            //foreach (var func in _funcs)
            //{
            //  QueryOvern = func.Invoke(QueryOver); // THIS CANT'T WORKS
            //}



            result = QueryOver.UnderlyingCriteria.
                     SetResultTransformer(Transformers.AliasToBean<T>()).
                     List<T>();

        }
        catch (Exception ex)
        {
            log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
            result = new List<T>();
            RollBackTransaction();
        }

    }
    catch (Exception ex)
    {
        log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
    }
    return result;
}

,我的意思是,我的意思是列表()有效,但是哇可以将弹性从iCriteria中应用于Iqueryover吗?

提前致谢

I'm wrapping QueryOver with the interface IQueryOver. Thanks UnderlyingCriteria I can access to the criteria.

I'd like to use the IQueryOver methods such as Take, Skip ...

My intention is to have a list of func to apply, in this scenario I have a

public IQueryOver QueryOver { get; set; }

/// <summary>
/// Set paging (before querying!)
/// </summary>
/// <param name="pageNumber"></param>
/// <param name="pageSize"></param>
public void Paging(int pageNumber, int pageSize)
{
    if (pageNumber > 0 && pageSize > 0)
    {
        _pageSize = pageSize;
        _pageNumber = pageNumber;

        NHibernate.ICriteria paging(IQueryOver str) => str.UnderlyingCriteria.SetFirstResult(pageSize * (pageNumber - 1)).SetMaxResults(pageSize);

        _funcs.Add(paging);
    }
}

Then I'd like to wrap List

public IList<T> List()
{
    IList<T> result = null;
    try
    {
        BeginTransaction();
        try
        {
            //foreach (var func in _funcs)
            //{
            //  QueryOvern = func.Invoke(QueryOver); // THIS CANT'T WORKS
            //}



            result = QueryOver.UnderlyingCriteria.
                     SetResultTransformer(Transformers.AliasToBean<T>()).
                     List<T>();

        }
        catch (Exception ex)
        {
            log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
            result = new List<T>();
            RollBackTransaction();
        }

    }
    catch (Exception ex)
    {
        log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
    }
    return result;
}

This works, I mean the List() works but wow can apply the func to the IQueryOver from ICriteria?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笑看君怀她人 2025-01-24 20:49:06

让我感到羞耻的是,每次它应用一个标准时,UnderlyngCriteria 都会添加它。所以_criterias是一个Action列表

private readonly IList<Action<IQueryOver>> _criterias = null; // [instantiated into constructor]

public void Paging(int pageNumber, int pageSize)
{
    if (pageNumber > 0 && pageSize > 0)
    {
        _pageSize = pageSize;
        _pageNumber = pageNumber;

        void paging(IQueryOver queryOver) => queryOver.Paging(pageNumber, pageSize);

        _criterias.Add(paging);
    }
}

然后它可以应用

public IList<T> List()
{
    IList<T> result = null;
    try
    {
        BeginTransaction();
        try
        {
            foreach (var criteria in _criterias)
            {
                criteria.Invoke(QueryOver);
            }

            result = QueryOver.UnderlyingCriteria.
                     SetResultTransformer(Transformers.AliasToBean<T>()).
                     List<T>();

        }
        catch (Exception ex)
        {
            log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
            result = new List<T>();
            RollBackTransaction();
        }

    }
    catch (Exception ex)
    {
        log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
    }
    return result;
}

我做了一个分页的扩展方法

public static class CustomExtensions
{
    public static NHibernate.ICriteria Paging(this IQueryOver queryOver, int pageNumber, int pageSize)
    {

        return queryOver.UnderlyingCriteria.SetFirstResult(pageSize * (pageNumber - 1)).SetMaxResults(pageSize);

    }
}

Shame of me, every time it applys a criteria UnderlyngCriteria adds it. So _criterias is a list of Action

private readonly IList<Action<IQueryOver>> _criterias = null; // [instantiated into constructor]

public void Paging(int pageNumber, int pageSize)
{
    if (pageNumber > 0 && pageSize > 0)
    {
        _pageSize = pageSize;
        _pageNumber = pageNumber;

        void paging(IQueryOver queryOver) => queryOver.Paging(pageNumber, pageSize);

        _criterias.Add(paging);
    }
}

then it can be applyed

public IList<T> List()
{
    IList<T> result = null;
    try
    {
        BeginTransaction();
        try
        {
            foreach (var criteria in _criterias)
            {
                criteria.Invoke(QueryOver);
            }

            result = QueryOver.UnderlyingCriteria.
                     SetResultTransformer(Transformers.AliasToBean<T>()).
                     List<T>();

        }
        catch (Exception ex)
        {
            log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
            result = new List<T>();
            RollBackTransaction();
        }

    }
    catch (Exception ex)
    {
        log.Error(System.Reflection.MethodBase.GetCurrentMethod().Name, ex);
    }
    return result;
}

I made a extension method to paging

public static class CustomExtensions
{
    public static NHibernate.ICriteria Paging(this IQueryOver queryOver, int pageNumber, int pageSize)
    {

        return queryOver.UnderlyingCriteria.SetFirstResult(pageSize * (pageNumber - 1)).SetMaxResults(pageSize);

    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文