2014-10-28 171 views
-1

我試圖找到發票號碼相同的所有行,但有不同的城市。LINQ查詢同一張表

我得到一個運行此代碼時無法隱式地將類型'System.Collections.Generic.IEnumerable'轉換爲'bool'錯誤。

from DataRowView i in dv 
where 
(
    from DataRowView s in dv 
    where 
    i.Row["InvoiceNo"] == s.Row["InvoiceNo"] && 
    i.Row["City"] != s.Row["City"] 
    select s 
) 
select i; 

等一整套像數據的{123,西雅圖,...},{123,西雅圖,...},{123,波特蘭,...}我只想要一個(在此案件){123,波特蘭,...}將被退回。

我不知道我做錯了什麼......

+1

你不能有一個查詢中一個where子句將返回一個集合,它需要一個返回一個bool的表達式。 – 2014-10-28 15:27:30

+0

因爲你的查詢沒有意義,所以你要說給我所有在dv中的數據行,它是真實的(不計算真或假的東西)。如果你告訴我們你想用英文做什麼「我想獲得XXXX的所有行」,因爲目前的代碼沒有意義,它會容易得多。 – 2014-10-28 15:28:15

+0

我試圖在行上設置一個錯誤標誌它返回 – innov83r 2014-10-28 15:28:51

回答

1

where()期待一個bool

from DataRowView s in dv ... select s正在返回IEnumerable<DataRowView>

從您的()您需要返回bool爲該查詢有意義。

4

where需要後面跟着一個布爾值,指示是否應該包含該項目。你提供了一系列的行。這不會告訴where它是否應該包含該項目。

你顯然試圖加入這個表對自己,對你最好使用Join,然後應用在加入結果過濾:

var query = from first in dv 
    join second in dv 
    on first.Row["InvoiceNo"] equals second.Row["InvoiceNo"] 
    where first.Row["City"] != second.Row["City"] 
    select first; 
+0

因此,在一組數據如{123,Seattle,...},{123,Seattle,...},{123,Portland,...}我運行上面的代碼,得到4個結果,當我只需要一個(在這種情況下) {123,Portland,...} – innov83r 2014-10-28 15:39:47

+0

@ innov83r然後你需要從頭開始實際上描述你想要在你的問題中的行爲。就目前而言,沒有任何跡象表明這一點,也沒有確切說明你想要通過這個例子得到什麼樣的行爲。 – Servy 2014-10-28 15:42:18

+0

對不起。我將在未來更加明確我的問題。我試圖獲得具有相同發票號碼但不同城市的行。 – innov83r 2014-10-28 15:43:41