使用动态 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");
我正在尝试对实体中的一些数据进行排序,然后再将它们传递给另一个函数。 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");