OrderBy with Dynamic Linq

时间:2015-02-04 10:42:57

标签: c# winforms entity-framework 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);
  }

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

2 个答案:

答案 0 :(得分:1)

我认为不是那样,.OrderBy(...)有效。尝试按属性排序:

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

我怀疑按字符串排序导致每个元素按相同属性排序,因此根本不排序。另外,我不确定,如果你的where子句就是这样的。

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

答案 1 :(得分:0)

您只需将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");