实体框架按动态输入顺序或默认按ID排序

时间:2020-02-08 13:37:32

标签: asp.net entity-framework

有人知道我该如何执行以下操作:

我有此代码:

sortOrder是用户输入

db.Table.OrderBy(s => sortOrder == "name" ? s.Table.Name : s.Id).ToList();

并出现以下错误:

Error   CS0173  Type of conditional expression cannot be determined because there is no implicit conversion between 'string' and 'int'

如果我设置s.Id.ToString(),那么它将不再通过升序进行排序,而是一个字符串,并且无法正确排序,是否有一种方法可以转换函数以便它接受数字?几乎感觉像是错误,因为即使大小写为字符串,switch语句默认也会接受ID

1 个答案:

答案 0 :(得分:0)

当您想使用LINQ Dynamic时,有2个库需要知道。

System.Linq.Dynamic

该库是免费的开放源代码。

NuGet:https://www.nuget.org/packages/System.Linq.Dynamic/

该库具有自己的语法,但非常易于使用:

myDataSource.OrderBy("someColumnName descending")

C#评估表达式

免责声明:我是项目C# Eval Expression

的所有者

该库不是免费的,但是您几乎可以使用与C#相同的语法来处理任何动态LINQ。

因此,您将能够构建一个字符串来求值,而库将为您完成其余工作。

这是一个在线示例:https://dotnetfiddle.net/oxSl3s

var customersList2 = context.Customers
    .Include(x => x.Invoices)
    .WhereDynamic(c => "c.Invoices.Count > 0")
    .OrderByDescendingDynamic(c => "c.Invoices.Count")
    .ToList();
相关问题