使用System.Linq.Expressions API在LINQ中选择列

时间:2012-07-02 18:22:55

标签: .net linq linq-expressions

我正在尝试使用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表达式的标准形式。正如您可以清楚地看到的那样,我已经熟悉如何以这种方式生成投影。

非常感谢任何帮助。

2 个答案:

答案 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);