C# select上的LINQ到SQL执行方法
我对LINQ真的很陌生,所以我试图弄清楚如何用lambda表达式执行方法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);
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; })