c#foreach进入LINQ表达式

时间:2014-09-17 14:45:26

标签: c# linq foreach

我一直在使用foreach语句并且resharpen建议我使用LINQ代替。这是我想出来的,但我收到了错误。有人可以帮我解决这个问题:

问题1: Foreach声明:

List<string> captured = new List<string>();
foreach (DataRow row in table.Rows)
    captured.Add(row["ID"].ToString());

尝试LINQ声明

var captured2 = table.Rows.ToList().ForEach(row => { captured.Add(row["ID"].ToString());});

问题2:

我也得到了这个复合语句,我不知道如何创建LINQ语句

        List<string> captured = new List<string>();
        foreach (DataRow row in table.Rows)
        {
            foreach (DataColumn col in table.Columns)
            {
                if (!col.ToString().Equals("Name") || !col.ToString().Equals("ID"))
                    captured.Add(row[col.ToString()].ToString());
            }
        }

由于

6 个答案:

答案 0 :(得分:3)

我使用ReSharper为我做这件事:D

List<string> captured = (from DataRow row in table.Rows select row["ID"].ToString()).ToList();

答案 1 :(得分:2)

当Resharper建议您使用LINQ时,将光标放在波浪形上并点击Alt-Enter。 Resharper将为您修复它。如果热键不起作用,您可以将鼠标悬停在波浪线上,并会出现一个图标,让您告诉Resharper修复代码。

事实上,这适用于所有Resharper的建议。我从来没有遇到过无法解决问题的建议。

答案 2 :(得分:1)

问题1
来自我的Resharper:

var captured = (from DataRow row in table.Rows select row["ID"].ToString()).ToList();

第二个问题:

var captured = (from DataRow row in table.Rows from DataColumn col in table.Columns where !col.ToString().Equals("Name") || !col.ToString().Equals("ID") select row[col.ToString()].ToString()).ToList();

答案 3 :(得分:0)

我不认为ReSharper意味着什么。

更好的Linq方法是:

var captured2 = table.Rows.Cast<DataRow>().Select(row => row["ID"].ToString()).ToList();

我很惊讶它并没有为你翻译 - 我从未见过ReSharper将foreach翻译成.ForEach()电话。

答案 4 :(得分:0)

ForEach不会返回任何IEnumerable。

不要将它分配给capture2,你很高兴

答案 5 :(得分:0)

你应该问问题2作为一个单独的问题,但这是你将如何做到这一点:

var values = (from DataRow row in table.Rows
             from string col in new[] {"Name", "ID"}
             select row[col].ToString()).ToList();

由于您知道自己想要哪些列,因此无需遍历所有列。

然而,更好的方法是这样做:

var values2 = (from DataRow row in table.Rows
               select new
               {
                   Name = row["Name"].ToString(),
                   ID = row["ID"].ToString()
               }).ToList();