2009-12-16 69 views
0

使用Oracle®Data Provider for .NET生成強類型數據集。
有關擴展的幫助Where()(此IEnumerable <CUSTOMERRow>源,Func <CUSTOMERRow,bool>謂詞)

我當然可以填寫整個表格,但我想了解如何使用帶有委託函數的Where()擴展,該委託函數應該根據某些表值限制收集的行數。

參數凡()擴展:

(this IEnumerable<CUSTOMERRow> source, Func<CUSTOMERRow, bool> predicate) 

的codesnippet應當使用該委託:

StronglyTypedDataSet myDataSet = new StronglyTypedDataSet(); 

CUSTOMERTableAdapter tableAdapter = new CUSTOMERTableAdapter(); 
tableAdapter.Fill(myDataSet.CUSTOMER.Where(newfunctionhere)); 

回答

1

Where方法可用於過濾集合的內容。但在你的情況下,你正在使用一個表適配器來填充一個空的DataTable,並調用空集合上的Where只產生一個空序列...並且表適配器不知道如何解釋Where調用,它只是使用它的SelectCommand來填充表格。所以你不能使用Linq來定義你想要在表中加載哪些數據。但是,一旦你的表被填滿,那麼你可以使用Where篩選結果,這樣的:

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

@Thomas Levesque:我收到錯誤消息:「參數類型System.Data.EnumerableRowCollection 不能分配給參數類型CUSTOMERDataTable」。有任何想法嗎? – 2009-12-16 17:34:00

+0

@Kb:你不能將表的行上的Where()查詢的結果賦值給你的DataTable變量。 Where的結果是行的IEnumerable,而不是表本身。 – 2009-12-16 17:36:41

+0

@Pavel Minaev:所以我不能使用tableadapter.fill()裏面的Where()擴展? – 2009-12-16 17:42:31

1

在C#lambda表達式通常被用作功能。 I.E .:

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

都不行......類似的答案已經發布和刪除 – 2009-12-16 17:26:41

+0

@Matthew Sposato:我得到的錯誤消息:「參數類型System.Data.EnumerableRowCollection 不能分配給參數類型CUSTOMERDataTable」。有任何想法嗎? – 2009-12-16 17:34:35

+0

填充需要一個DataTable作爲參數。在哪裏返回一個EnumerableRowCollection ,而不是一個DataTable。無論如何,你試圖做的事情根本沒有意義。您試圖過濾無論如何都是空的DataTable ...... Where方法過濾DataTable,而不是表適配器所做的查詢! – 2009-12-16 17:47:21

相關問題