我有問題要檢測數據表Email_Total
中是否有新行尚未導入到ContactDetail
中。LINQ:除了不能以預期的方式工作
Dim srcUnique = From row In src.Email_Total
Select row.ticket_id, row.interaction, row.modified_time
Dim destUnique = From row In dest.ContactDetail
Where row.ContactRow.ContactTypeRow.idContactType = emailContactTypeID
Select row.ContactRow.Ticket_ID, row.Interaction, row.ModifiedAt
Dim diff = srcUnique.Except(destUnique)
Dim needUpdate = diff.Any
我必須比較多列上的數據,因爲這兩個表中的ID不相等。
此工作原理直到我將row.modified_time
/row.ModifiedAt
列(兩個DateTime)都添加到select中,因爲行只在所有三個值相等時纔是唯一的。如果我添加的日期列作爲第三個參數以下錯誤(上srcUnique.Except(destUnique)
)編譯所示:
「System.Data.EnumerableRowCollection(OF <anonymous type>
)」不能被轉換爲 「System.Collections.Generic.IEnumerable (Of Out T)中的'Out' 通用參數'T'所需要的,因爲'<anonymous type
> (line 471)''不是從'< anonymous type
>(line 468) )'
奇怪的是,當我刪除時也顯示錯誤-column from the chosen and leave only Ticket_ID
and Modified_Time
but it works if we use the Ticket_ID
and Interaction
columns。
注意:src
和dest
是強類型數據集和數據表都的模式略有不同,但我認爲,這個問題不僅關係到LINQ到數據集。
編輯:這些是datamodels(TICKET_ID INT,相互作用INT,ModifiedAt日期時間)
解:(感謝@Stuart)
Dim srcUnique = From row In src.Email_Total
Select Ticket_ID = row.ticket_id, Interaction = row.interaction, ModifiedAt = row.modified_time
Dim destUnique = From row In dest.ContactDetail
Where row.ContactRow.ContactTypeRow.idContactType = emailContactTypeID
Select row.ContactRow.Ticket_ID, row.Interaction, row.ModifiedAt
你的兩種類型是不同的所以linq不能比較他們 – Manatherin
@ Manatherin:但所有列的類型是相同的,因此我認爲linq會生成相同的匿名類型。 –