LINQ OrderBy 字符串参数

标签 linq sorting gridview parameters

我确信这不是最有效的方法,但我有一个 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/

相关文章:

javascript - jQuery Yii 更新数据表,仅当选项卡显示时

c# - 添加后 FirstOrDefault 似乎没有调用数据库

c# Linq 选择不同的日期时间天

python - 通过python中的自定义比较器对元组列表进行排序

java - 使边界框与另一个边界框相等 : Opencv , Android

.net - 复选框 Gridview 启用和禁用

c# - 无效的列名称 'Length' 已编辑 MVC 4 成员资格

c# - 使用正则表达式连接 linq

sorting - Coq 列表排序实践 & sortBy?

c# - .Net Gridview 在鼠标悬停后恢复交替颜色