2014-02-27 39 views
0

我在Visual Studio 2013中創建了一個名爲ChangeLog的數據集,其中包含兩個表:ChangeMaster和ChangeDetail。這兩個表通過一個int關鍵字相連,只有ChangeDetail在我的問題中起作用。這是一個報告數據集,永遠不會駐留在磁盤上的數據庫中。將LINQ結果轉換爲新的數據集行

我在報告審計數據,即對記錄的更改。你們中的一些人可能會將ApexSQL數據表識別爲我的審計來源。下面的查詢工作正常,如果我用自己的類調用changeDetail替換Entities.ChangeLog.ChangeDetailRow。但我無法讓它與原生數據集表ChangeDetailRow一起工作。錯誤發生在'???'中的字段中並且它表示'Entities.ChangeLog.ChangeDetailRow不包含帶0參數的構造函數'。唯一的參數是(DataRowBuilder rb)。

我可以使用ChangeDetail C#創建新行:

(Entities.ChangeLog.ChangeDetailRow)_changeDS.Tables["ChangeDetail"].NewRow(); 

,但無法弄清楚LINQ想要什麼。我試圖創建一個ChangeDetail的擴展方法,它接受多個參數,但沒有成功。

我需要把什麼放在??? ...?

List<Entities.ChangeLog.ChangeDetailRow> details = 
    (from data in infoEntities.AUDIT_LOG_DATA 
    join trx in infoEntities.AUDIT_LOG_TRANSACTIONS on data.AUDIT_LOG_TRANSACTION_ID equals trx.AUDIT_LOG_TRANSACTION_ID 
    where PKs.Contains(data.PRIMARY_KEY) 
    select new ???Entities.ChangeLog.ChangeDetailRow??? 
    { 
     PKInfoRequest = data.KEY1, 
     Date = trx.MODIFIED_DATE, 
     Action = trx.AUDIT_ACTION_ID, 
     Field = data.COL_NAME, 
     OldValue = data.OLD_VALUE_LONG, 
     NewValue = data.NEW_VALUE_LONG 
    }).ToList<Entities.ChangeLog.ChangeDetailRow>(); 

回答

0

考慮到here的內容,您可能無法以這種方式創建新行。你能否簡單地把'???'和嘗試:

... 
select new 
    { 
     PKInfoRequest = data.KEY1, 
... 

然後,您可以用.NewRow()創建行並用數據填充它們。

+0

是的,我可以使用var和你提出的結構。但是,這意味着我仍然需要額外的步驟將var結果複製到ChangeDetail表中,就像我創建自己的類來模擬ChangeDetail一樣。使用ChangeDetail的原因是我使用DevExpress進行報告,並接受Master-Detail關係。我知道定義Master-Detail關係的唯一方法是在Data Designer中,因此我需要最終使用ChangeLog Dataset。 – user1185782

+0

無法進一步幫助您。看來這不是LINQ問題,而是DataRow問題。我只知道基礎知識,並且在MSDN上建議採取額外的步驟,所以如果它有效,我會使用它。稍後優化:) –

+0

您提供的鏈接幾乎總結了這種情況。 LINQ to Entities只能使用零參數構造函數,而ADO.NET數據設計器不會創建這樣的構造函數。它創建那些,我敢說無用的Rowbuilder參數,它不能被使用。 – user1185782