【问题标题】:LINQ to SQL OrderBy using string varible in C# 6 [duplicate]LINQ to SQL Order通过在C#6中使用字符串变量[重复]
【发布时间】:2017-04-26 10:04:02
【问题描述】:

我正在使用 C# Version 6,我有一个字符串变量,我正在尝试对 LINQ to SQL 数据库表进行排序,之前它工作正常,但现在它没有给出适当的排序结果。

using (var db = new DBEntity()) {
    var propertyInfo = nameof(Client.ClientName);
    var iQuery = db.Clients.OrderByDescending(i => propertyInfo);
    foreach (var item in iQuery.ToList()) {
        Console.WriteLine(item.ClientName);
    }
}

注意:我在 Stack Overflow 博客和其他网站上参考了很多教程,但我找不到。

请帮助我,我的代码有什么问题。

表结构和数据

ClientName   ClientStatus
______________________________
Emma         Active
Harry        Active

在升序和降序中,我得到相同的输出

ClientName   ClientStatus
______________________________
Emma         Active
Harry        Active

【问题讨论】:

    标签: c# linq linq-to-sql sql-order-by c#-6.0


    【解决方案1】:

    您不能只传递要用于排序的属性的名称(字符串)。您应该使用属性选择器表达式:

    var iQuery = db.Clients.OrderByDescending(c => c.ClientName);
    

    解释

    LINQ to SQL 从您传递给查询运算符的表达式生成 SQL 查询。例如。对于订购,您应该传递一个属性选择器表达式:

    OrderByDescending(x => x.SomeProperty)
    

    LINQ to SQL 将使用此 表达式 来获取映射到给定属性的数据库字段(请记住,您可以更改映射)。并生成类似

    ORDER BY SomeProperty DESC
    

    但是当你传递字符串时

    OrderByDescending(x => "SomeProperty")
    

    认为 LINQ 可以做的最好的事情是按您传递的字符串文字进行排序:

    ORDER BY N'SomeProperty' DESC
    

    当然这种“排序”不会改变查询结果的顺序

    【讨论】:

    • 动态地获得属性名称。此外,上面的语句运行没有任何构建错误。
    • @Mastero 动态你不排序任何东西
    • 请告诉我为什么?
    • @Mastero 看看解释
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多