C# select上的LINQ到SQL执行方法

C# select上的LINQ到SQL执行方法,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我对LINQ真的很陌生,所以我试图弄清楚如何用lambda表达式执行方法 public void GetData() { using (MyClassesDataContext context = new MyClassesDataContext()) { var problems = (from p in context.Problems select p).Take(10);

我对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));

我做错了什么?

Select
运算符用于创建投影-即,作为参数传递的lambda表达式指示如何从集合中的每个对象创建新对象

相反,您要做的是对集合中的每个项执行操作。使用
foreach
循环:

var problems = (from p in context.Problems select p).Take(10);

foreach (var t in problems)
{
     DisplayData(t.Text);
}
并行。ForEach。下面是一个示例

-执行foreach操作,其中迭代可以并行运行


样本类
LINQ代码示例
我认为,如果您对代码进行以下更改,它将正常工作:

problems.Select(t => { DisplayData(t.Text); return true; })

DisplayData
无效。它应该会返回一些东西。或者类似于
problem.ToList().ForEach(t=>DisplayData(t.Text))
Problems是我刚刚从服务器资源管理器中拖拽并创建到MyClassesDataContext(我不确定您的定义是什么)中的SQL表,谢谢,problem.ToList().ForEach(t=>DisplayData(t.Text))就可以了!您应该首先进行投影:。取(10)。选择(x=>x.Text);这将有助于获取更少的数据。DisplayData将实际使用t中的所有字段,而不仅仅是文本。我想这样做,但不知道如何在标准forech循环中使用匿名类型,这太容易了。谢谢,有没有建议只对10个项目使用并行ForEach?嗯,是的。这是一个并行处理循环。这意味着虚拟多线程。这是一个10条记录的问题,案例可能会在您当前的需求中需要追加零条记录的地方出现……同时并行执行10条记录也很好。
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++;
}
problems.Select(t => { DisplayData(t.Text); return true; })