有人知道我该如何执行以下操作:
我有此代码:
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
答案 0 :(得分:0)
当您想使用LINQ Dynamic时,有2个库需要知道。
该库是免费的开放源代码。
NuGet:https://www.nuget.org/packages/System.Linq.Dynamic/
该库具有自己的语法,但非常易于使用:
myDataSource.OrderBy("someColumnName descending")
免责声明:我是项目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();