【问题标题】:how to do this using linq? [duplicate]如何使用 linq 做到这一点? [复制]
【发布时间】:2011-03-29 13:00:15
【问题描述】:

可能重复:
LINQ equivalent of foreach for IEnumerable<T>

请帮我弄清楚如何用 linq 表达式替换下面的循环:


using System.Web.UI.WebControls;
...
Table table = ...;
BulletedList list = new BulletedList();

foreach (TableRow r in table.Rows)
{
    list.Items.Add(new ListItem(r.ToString()));
}

这是一个人为的例子,实际上我当然不会将行转换为字符串。

我在问如何使用 BulletedList.AddRange 并为其提供使用 linq 语句从表创建的项目数组。

谢谢! 康斯坦丁

【问题讨论】:

  • @aksonu:欢迎来到 StackOverflow!请投票支持对您有帮助的答案,并将对您最有帮助的答案标记为已接受(单击复选标记)。这是一个声誉系统,有助于提高您的声誉,并确保对您的问题做出高质量的回答。
  • @aksonu:记得在 StackOverflow 上为您认为有帮助的答案投票 - 每个答案得分上方/下方的灰色三角形。不为投票而钓鱼,只是想提供帮助! :) 这适用于所有答案,甚至那些不在您提出的问题上的答案!
  • 不能。声誉不够 :) 感谢您的帮助。

标签: c# .net asp.net linq


【解决方案1】:

考虑将AddRange() 与新的ListItems 数组一起使用。您必须.Cast() 才能获得IEnumerableTableRow

  list.Items.AddRange(
         table.Rows.Cast<TableRow>()
                   .Select(x => new ListItem(x.ToString()))
                   .ToArray()
   );

【讨论】:

    【解决方案2】:

    怎么样

    list.Items.AddRange(table.Rows.Select(r => new ListItem(r.ToString())));
    

    【讨论】:

    • 我无法将 Select 应用于 table.Rows,可以吗?
    • 那是我的错,只是把一些东西写下来作为一个想法,正如 p.campbell 指出的那样,你需要先投射,然后在最后调用 ToArray()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2019-09-19
    • 2019-04-30
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多