LINQ to SQL OrderBy 在 C# 6 中使用字符串变量

LINQ to SQL OrderBy using string varible in C# 6

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

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 博客和其他网站上参考了很多教程,但我找不到。

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

Table 结构和数据

ClientName   ClientStatus
______________________________
Emma         Active
Harry        Active

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

ClientName   ClientStatus
______________________________
Emma         Active
Harry        Active

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

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

当然这样'sorting'不会改变查询结果的顺序