我确信这不是最有效的方法,但我有一个 LINQ 语句,并且想要根据 switch case 对字段进行 OrderBy(这是在 GridView 的 OnSorting 事件中)
switch (e.SortExpression)
{
case "Date":
field = "btu.Date";
break;
}
var ds (from btu in dc.BTUs
join zone in dc.BTUZones on btu.BTUZoneKey equals zone.BTUZoneKey
orderby field ascending
select new { btu.BTUKey, btu.Date, zone.BTUZoneName, btu.BTUValue }).ToList();
gv.DataSource = ds;
gv.DataBind();
我的猜测是我无法在查询中放置字符串文字。我是否应该更改排序表达式以匹配我想要 OrderBy 的字段,或者是否有办法在查询中放置参数并接受它(我不能按日期排序,我需要按 btu.Date 排序)
最佳答案
尝试代码:
你已经无法在btu中直接使用Linq对象 所以我有其他解决方案这个问题。
var ds = (from btu in dc.BTUs
join zone in dc.BTUZones on btu.BTUZoneKey equals zone.BTUZoneKey
select new { btu.BTUKey, btu.Date, zone.BTUZoneName, btu.BTUValue }).ToList();
switch (e.SortExpression)
{
case : "Date":
ds= ds.OrderBy(c=>c.Date).ToList();
break;
case : "Name"
ds= ds.OrderBy(c=>c.BTUZoneName).ToList();
break;
}
并添加另一个解决方案:
使用 Linq System.Linq.Dynamic
转到 Vs studio->工具->NewGet Package Manager->Package Manager Console
输入命令
安装安装包 System.Linq.Dynamic -版本 1.0.7
此引用添加您的项目
使用以下代码后:
using System.Linq.Dynamic;
string Field="";
switch (e.SortExpression)
{
case : "Date":
Field= "Date";
break;
case : "Name"
Field= "BTUZoneName";
break;
}
var ds = (from btu in dc.BTUs
join zone in dc.BTUZones on btu.BTUZoneKey equals zone.BTUZoneKey
select new { btu.BTUKey, btu.Date, zone.BTUZoneName, btu.BTUValue })
.OrderBy(Field).ToList();
关于LINQ OrderBy 字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44663724/