3

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

任何帮助是极大的赞赏。

4

2 回答 2

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# 中

于 2012-07-02T19:05:51.143 回答
0

在 C# 中它看起来像这样

var myStringLengths = myStrings
                        .Select((s) => s.Length);
于 2012-07-02T18:31:59.880 回答