如何通过我的对象列表中的传递字符串值进行排序?我需要在我的List(Of)对象上进行分页和排序,分页没有问题,但我不知道是谁让Order By工作.
这是我目前正在做的事情,它的工作很棒:
Return returnReports.Skip(PageSize * (PageNumber-1)).Take(PageSize).ToList()
Run Code Online (Sandbox Code Playgroud)
我如何让它工作?
Return returnReports.OrderBy(SortColumn).Skip(skip).Take(PageSize).ToList()
Run Code Online (Sandbox Code Playgroud)
SortColumn是传递的字符串值
我做了一个小实验来测试lamdba表达式是否可以检索比foreach语句更快的结果.但是,Lambda失败了
System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch();
st.Start();
List<int> lst = new List<int>();
foreach (GridViewRow item in GridView1.Rows)
{
if (((CheckBox)item.FindControl("Check")).Checked)
{
lst.Add(Convert.ToInt32(((Label)item.FindControl("Id")).Text));
}
}
st.Stop();
Response.Write(st.Elapsed.ToString());
Response.Write("<br/><br/><br/>");
st.Reset();
st.Start();
List<int> lstRank = GridView1.Rows.OfType<GridViewRow>().Where(s => ((CheckBox)s.FindControl("Check")).Checked)
.Select(s => Convert.ToInt32(((Label)s.FindControl("Id")).Text)).ToList();
st.Stop();
Response.Write(st.Elapsed.ToString());
int i = 0;
output
00:00:00.0000249
00:00:00.0002464
Run Code Online (Sandbox Code Playgroud)
为什么lambda比foreach慢.这可能是lambda表达式的缺点
我们需要动态生成委托类型.我们需要根据输入参数和输出生成委托.输入和输出都是简单类型.
例如,我们需要生成
int Del(int, int, int, string)
Run Code Online (Sandbox Code Playgroud)
和
int Del2(int, int, string, int)
Run Code Online (Sandbox Code Playgroud)
任何关于如何开始这方面的指示都会非常有帮助.
我们需要解析表示为xml的表达式.
例如,我们将(a + b)表示为
<ADD>
<param type="decimal">A</parameter>
<param type="decimal">B</parameter>
</ADD>
Run Code Online (Sandbox Code Playgroud)
我们现在希望将其暴露为Func<decimal, decimal, decimal>.我们当然希望允许xml中的嵌套节点,例如:
(a + b) + (a - b * (c - d)))
Run Code Online (Sandbox Code Playgroud)
我们希望使用表达式树和Expression.Compile.
欢迎就这种方法的可行性提出建议.
我期待通过使用C#解析xml来创建表达式树.xml将如下所示:
<Expression>
<If>
<Condition>
<GreaterThan>
<X>
<Y>
</GreaterThan>
</Condition>
<Expression />
<If>
<Else>
<Expression />
</Else>
<Expression>
Run Code Online (Sandbox Code Playgroud)
或者另一个例子......
<Expression>
<Add>
<X>
<Expression>
<Y>
<Z>
</Expression>
</Add>
</Expression>
Run Code Online (Sandbox Code Playgroud)
......关于从哪里开始的任何指示都会有所帮助.
亲切的问候,