C# 扩展名Where()的帮助(此IEnumerable<;CUSTOMERRow>;源、函数<;CUSTOMERRow、bool>;谓词)

C# 扩展名Where()的帮助(此IEnumerable<;CUSTOMERRow>;源、函数<;CUSTOMERRow、bool>;谓词),c#,.net,oracle,odp.net,C#,.net,Oracle,Odp.net,使用Oracle®Data Provider for.NET生成强类型数据集。 我当然可以填充整个表,但我想学习如何使用Where()扩展和委托函数,该函数应根据某些表值限制收集的行数。 Where()扩展名的参数: (this IEnumerable<CUSTOMERRow> source, Func<CUSTOMERRow, bool> predicate) 在C#中,lambda表达式通常用作函数。即: tableAdapter.Fill(myDataSet.CU

使用Oracle®Data Provider for.NET生成强类型数据集。

我当然可以填充整个表,但我想学习如何使用Where()扩展和委托函数,该函数应根据某些表值限制收集的行数。

Where()扩展名的参数:

(this IEnumerable<CUSTOMERRow> source, Func<CUSTOMERRow, bool> predicate)
在C#中,lambda表达式通常用作函数。即:

tableAdapter.Fill(myDataSet.CUSTOMER.Where(c => c.LastName == "Smith"));

Where
方法可用于筛选集合的内容。但是在您的例子中,您使用一个表适配器来填充一个空的
DataTable
,在一个空集合上调用Where只会生成一个空序列。。。表适配器不知道如何解释
Where
调用,它只使用SelectCommand填充表。因此,不能使用Linq定义要在表中加载的数据。但是一旦您的表被填满,您就可以使用
Where
来过滤结果,如下所示:

var rows = myDataSet.CUSTOMER.AsEnumerable().Where(cr => cr.SomeProperty == someValue);

不起作用。。。一个类似的答案已经发布并发布deleted@MatthewSposato:我收到错误消息:“参数类型System.Data.EnumerablerRowCollection不可分配给参数类型CUSTOMERDataTable”。有什么想法吗?Fill将数据表作为参数。其中返回EnumerablerRowCollection,而不是DataTable。不管怎样,你想做的根本没有意义。您正在尝试筛选一个空的数据表。。。Where方法过滤DataTable,而不是表适配器所做的查询@Thomas Levesque:我收到错误消息:“参数类型System.Data.EnumerablerRowCollection不可分配给参数类型CUSTOMERDataTable”。有什么想法吗?@Kb:您不能将表中某行的
Where()
查询结果分配回
DataTable
变量。
Where
的结果是行的
IEnumerable
,而不是表本身。@Pavel Minaev:所以我不能在tableadapter.fill()中使用Where()表达式?不,你不能。这就是我试图解释的,但我似乎失败得很惨;)
var rows = myDataSet.CUSTOMER.AsEnumerable().Where(cr => cr.SomeProperty == someValue);