我一直在使用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());
}
}
由于
答案 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();