使用动态 Linq 的 OrderBy

OrderBy with Dynamic Linq

我正在尝试对实体中的一些数据进行排序,然后再将它们传递给另一个函数。 tableName 和 columnName 都是动态选择的。这就是我正在做的事情:

string tableName = cboSelectTable.Text.ToString();
var comboBoxColumn = from a in Context.RULES where 
                     a.ISCOMBOBOXCOLUMN == "Y" select a.COLUMN;

foreach (var colName in comboBoxColumn)
  {
    var getTableName = entityModel.GetType()
                                  .GetProperty(tableName)
                                  .GetValue(entityModel, null);
    var getData = ((IQueryable<object>)getTableName)
                                      .Where(colName + "!=null")
                                      .Select(colName)
                                      .Distinct()
                                      .OrderBy('"'+ colName +'"');
    dgvCboColumn(getData, colName);
  }

但这不是对数据进行排序。我也尝试了其他一些方法,但无法弄清楚。我该如何解决?

我认为 .OrderBy(...) 不是这样。尝试按属性排序:

SomeList.OrderBy(l => l.SomeAttribute);

我怀疑按字符串排序会导致每个元素按同一属性排序,因此根本没有排序。另外,我不确定你的 where-clause 是否这样工作。

已经回答了另一个相关的 SO 问题。您可能想看看它:click me!

您可以简单地将 Select 放在 OrderBy 之后:

var getData = ((IQueryable<object>)getTableName)
                  .Where(colName + "!=null")
                  .OrderBy(colName)
                  .Select(colName)
                  .Distinct();

这将允许您引用列名称。(由于某些原因似乎不起作用)。

或者,您可以引用当前实例:

var getData = ((IQueryable<object>)getTableName)
                  .Where(colName + "!=null")
                  .Select(colName)
                  .Distinct()
                  .OrderBy("it");