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'不会改变查询结果的顺序
我正在使用 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'不会改变查询结果的顺序