LINQ OrderBy字符串参数

时间:2017-06-20 22:01:21

标签: linq sorting gridview parameters

我确定这不是最有效的方法,但我有一个LINQ语句,并希望OrderBy基于一个切换案例的字段(这是在GridView的OnSorting事件中)

CFRelease

我的猜测是我无法在查询中放置字符串文字。我应该更改我的排序表达式以匹配我想要OrderBy的字段,或者是否有办法在查询中放置一个参数并接受它(我不能按日期排序我需要按btu.Date排序)

2 个答案:

答案 0 :(得分:1)

尝试代码:

你直接无法在btu中使用Linq Object 所以我已经改变了解决这个问题的方法。

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程序包管理器 - >程序包管理器控制台

输入命令

安装Install-Package System.Linq.Dynamic -Version 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();

答案 1 :(得分:0)

让LINQ对任意运行时数据进行排序的最简单方法是安装System.Linq.Dynamic NuGet package。 (这是关于library's dynamic operators的文档的链接。)

但是,您必须将LINQ从查询语法更改为方法语法:

using System.Linq.Dynamic;

...

var ds =
  dc.BTUs
  .Join(dc.BTUZones,
        btu => btu.BTUZoneKey,
        zone => zone.BTUZoneKey,
        (btu, zone) => new { btu.BTUKey, btu.Date, zone.BTUZoneName, btu.BTUValue })
  .OrderBy("BTUZoneName") // Or you can use a string variable
                          // or function call for the parameter.
  .ToList();

构建动态运行时LINQ查询的另一种方法是创建自己的自定义表达式树。 (这是System.Linq.Dynamic中的代码实现方式。)这是Microsoft article that explains the basics