我正在尝试使用LINQ表达式动态选择IEnumerable
中的列到我可以绑定到UI的结果集中。在这一点上,我很难掌握LINQ表达式中的投影基础知识。
假设我有一个像这样的字符串列表:
Dim myStrings = {"one", "two", "three"}.ToList()
使用lambda表达式我可以通过执行以下操作轻松选择字符串长度的集合:
Dim myStringLengths = myStrings.Select(Function(x) x.Length)
此声明的结果将为我留下一个名为myStringLengths
的集合,其中包含3, 3, 5
元素。
我似乎无法弄清楚我是如何使用LINQ表达式生成等效结果的。
编辑:当我说LINQ表达式时,我说的是在System.Linq.Expressions
命名空间中使用API,而不是LINQ语句或lambda表达式的标准形式。正如您可以清楚地看到的那样,我已经熟悉如何以这种方式生成投影。
非常感谢任何帮助。
答案 0 :(得分:3)
var item = Expression.Parameter(typeof(string), "x");
var length = Expression.PropertyOrField(item, "Length");
new string[] {"one", "two", "three"}
.AsQueryable()
.Select(Expression.Lambda<Func<string, int>>(length, item));
你需要一个IQueryable来使用表达式(你可以使用ToList或类似的方法将它带回IEnumerable)。 然后生成Lambda作为表达式树(长度示例在上面完成)。 对不起它在C#
答案 1 :(得分:0)
在C#中它看起来像这样
var myStringLengths = myStrings
.Select((s) => s.Length);