我是LINQ的新手,所以我想弄清楚如何用lambda表达式执行方法。
public void GetData()
{
using (MyClassesDataContext context = new MyClassesDataContext())
{
var problems = (from p in context.Problems select p).Take(10);
problems.Select(t => DisplayData(t.Text));
}
}
public void DisplayData(string Text)
{
}
我收到了这个错误:
方法的类型参数 “System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)'无法从用法中推断出来。 尝试明确指定类型参数。
在这一行:
problems.Select(t => DisplayData(t.Text));
我做错了什么?
答案 0 :(得分:4)
Select
运算符用于创建投影 - 即作为参数传递的lambda表达式指示如何从集合中的每个对象创建新对象。
您要做的是对集合中的每个项目执行操作。使用foreach
循环:
var problems = (from p in context.Problems select p).Take(10);
foreach (var t in problems)
{
DisplayData(t.Text);
}
答案 1 :(得分:0)
我认为如果您对代码进行以下更改,它将正常工作:
problems.Select(t => { DisplayData(t.Text); return true; })
答案 2 :(得分:-1)
的 Parallel.ForEach 强> 的。这是一个示例示例......
Reference - 执行foreach操作,其中迭代可以并行运行。
class abc
{
public int i;
}
List<abc> d = new List<abc>();
d.Add(new abc { i = 1 });
d.Add(new abc() { i = 2 });
d.Add(new abc() { i = 3 });
d.Add(new abc() { i = 4 });
var problems = (from p in d select p).Take(2);
int k = 0;
System.Threading.Tasks.Parallel.ForEach(problems, j =>
{
abcd(ref j.i);
k += j.i;
}
);
void abcd(ref int i)
{
i++;
}