我在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>();
是的,我可以使用var和你提出的結構。但是,這意味着我仍然需要額外的步驟將var結果複製到ChangeDetail表中,就像我創建自己的類來模擬ChangeDetail一樣。使用ChangeDetail的原因是我使用DevExpress進行報告,並接受Master-Detail關係。我知道定義Master-Detail關係的唯一方法是在Data Designer中,因此我需要最終使用ChangeLog Dataset。 – user1185782
無法進一步幫助您。看來這不是LINQ問題,而是DataRow問題。我只知道基礎知識,並且在MSDN上建議採取額外的步驟,所以如果它有效,我會使用它。稍後優化:) –
您提供的鏈接幾乎總結了這種情況。 LINQ to Entities只能使用零參數構造函數,而ADO.NET數據設計器不會創建這樣的構造函數。它創建那些,我敢說無用的Rowbuilder參數,它不能被使用。 – user1185782