2009-07-22 16 views
1

我有幾行數據通過大表中的linq-to-sql拉入到業務對象中。linq-to-sql如何獲取與我現有的行不匹配的幾行?

現在我想要得到幾個不匹配的行來測試我的比較函數。

使用的是什麼我想會的工作,我得到一個NotSupportedException異常:

本地序列不能在LINQ用於SQL執行查詢操作,除了載有()運算符。

下面的代碼:

//This table has a 2 field primary key, the other has a single 
var AllNonMatches = from c in dc.Acaps 
    where !Matches.Rows.Any((row) => row.Key.Key == c.AppId & row.Key.Value == c.SeqNbr) 
    select c; 

foreach (var item in AllNonMatches.Take(100)) //Exception here 
{} 

該表具有化合物主鍵:的AppId和SEQNBR。

Matches.Rows被定義爲keyvaluepair(appid,seqnbr)的字典。

本地序列它指的是似乎是本地字典。

回答

0

您能否提供更多關於表格的結構和名稱的信息?

不知道你想做什麼?

編輯:

好吧..我想我得到它現在...

看樣子你不能合併/用SQL表連接本地表(字典)。 如果可以的話,恐怕我不知道該怎麼做。

我能想到的最簡單的辦法是把這些結果以表格(「匹配」的實例)與相關表格「ACAPS」外鍵,然後使用LINQ到SQL,如:

var AllNonMatches = dc.Acaps.Where(p=>p.Matchs==null).Take(100).ToList(); 

抱歉,我不能想出什麼更好=(

+0

更新了問題 – Maslow 2009-07-22 18:30:48

0

這個怎麼樣:

var AllNonMatches = from c in dc.Acaps 
    where !(Matches.Rows.ContainsKey(c.AppId) && Matches.Rows.ContainsValue(c.SeqNbr)) 
    select c; 

這將很好地工作,我也使用了位AND運算符(& &) - 我認爲這是幫助提高標準AND運算符性能的正確術語。

+0

雖然存在這種情況,但這並不正確 - 假設我們在匹配中有兩個相關項:(A,B)和(C,D)。我們目前正在選擇一個項目,如(A,D)。儘管這個項目不存在於匹配中(因此它應該被選中),但它不會被返回,因爲兩個值都存在於匹配中(儘管不在同一項目中)。 – 2009-07-23 02:03:32

相關問題