加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何通过SQLite.NET降序排序? OrderByDescending()给我错误:“

发布时间:2020-12-12 18:55:21 所属栏目:百科 来源:网络整理
导读:我正在尝试实现一个方法来检索表中的所有行,按ID降序排序. 这是代码: public IEnumerableT GetItemsDescendingT() where T : IBusinessEntity,new() { lock (locker) { return TableT().Select(i = i).OrderByDescending(xx = xx.ID).ToList(); } } 这看起
我正在尝试实现一个方法来检索表中的所有行,按ID降序排序.

这是代码:

public IEnumerable<T> GetItemsDescending<T>() where T : IBusinessEntity,new()
    {
        lock (locker) 
        {
            return Table<T>().Select(i => i).OrderByDescending(xx => xx.ID).ToList();
        }
    }

这看起来应该可行,但我收到一个我不明白的错误:

"Order By does not support: xx => Convert(xx).ID"

从以下SQLite方法:

private TableQuery<T> AddOrderBy<U>(Expression<Func<T,U>> orderExpr,bool asc)
{
    if (orderExpr.NodeType == ExpressionType.Lambda)
    {
        var lambda = (LambdaExpression)orderExpr;

        MemberExpression mem = null;

        var unary = lambda.Body as UnaryExpression;
        if (unary != null && unary.NodeType == ExpressionType.Convert)
        {
            mem = unary.Operand as MemberExpression;
        }
        else
        {
            mem = lambda.Body as MemberExpression;
        }

        if (mem != null && (mem.Expression.NodeType == ExpressionType.Parameter))
        {
            var q = Clone<T>();
            if (q._orderBys == null)
            {
                q._orderBys = new List<Ordering>();
            }
            q._orderBys.Add(new Ordering
            {
                ColumnName = Table.FindColumnWithPropertyName(mem.Member.Name).Name,Ascending = asc
            });
            return q;
        }
        else
        {
            throw new NotSupportedException("Order By does not support: " + orderExpr);
        }
    }
    else
    {
        throw new NotSupportedException("Must be a predicate");
    }
}

按要求:PanelLog类:

public class PanelLog : IBusinessEntity
{
    public PanelLog()
    {

    }

    [PrimaryKey,AutoIncrement]
    public int ID { get; set; }

    public uint Sequence { get; set; }
    public DateTime Time { get; set; }
    public string Message { get; set; }
    public bool Alarm { get; set; }
}

解决方法

没有答案?

好吧,这就是我正在做的工作:

public static IEnumerable<PanelLog> GetPanelLogsDescendingSql(params object[] args)
{
    return me.db.Query<PanelLog>("select * from PanelLog ORDER BY ID DESC");        
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读