【问题标题】:Why does the "Limit()" method no longer exist in the ServiceStack OrmLite v4?为什么 ServiceStack OrmLite v4 中不再存在“Limit()”方法?
【发布时间】:2016-05-25 15:45:19
【问题描述】:

在 ServiceStack OrmLite v3 中,您可以这样做:

var rows = db.Select<Employee>().Limit(10));

或者:

var rows = db.Select<Employee>().Limit(5, 10)); // skips 5 then takes 10

但是我在 v4 中再也找不到这些方法了。

我想我可以改为:

var rows = db.SelectLazy<Employee>().Take(10);

但是我怎么能做一个db.Select(不必编写直接的SQL),它将转换为(例如在SQLite中):

SELECT * FROM Employee LIMIT 10;

另外,是否可以为以下内容编写等效查询(同样无需编写直接 SQL)?

SELECT * FROM Employee ORDER BY Age;

谢谢。

【问题讨论】:

    标签: c# ormlite-servicestack micro-orm


    【解决方案1】:

    在 ServiceStack.OrmLite v4 中,Limit() 似乎只能作为 SqlExpression&lt;T&gt; 的扩展使用。构建查询:

    var query = db.From<SWChars>().Limit(10);
    query = query.Where<SWChars>(char => 
        char.FirstName == "Jar Jar" &&
        char.FunnyLines < 0);
    
    var result = db.Select<SWChars>(query);
    

    我希望这可以帮助某人。我花了几个小时在谷歌上搜索。

    【讨论】:

      【解决方案2】:

      我可以在文档中看到OrderBy/OrderByDescending,它看起来像:

      var rows = db.SelectLazy<Employee>().OrderBy<Employee>(e=>e.Age).Take(10);
      

      这可能有助于解决Limit 问题ServiceStack.OrmLite: Where is the method to write custom SQL and get result set back?

      【讨论】:

      • 您发布的链接很棒,非常接近我想要的,但是它不适用于“SelectLazy”,仅适用于“Select”,如果可以返回 IEnumerable 就好了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多