我在Visual Studio 2013中创建了一个名为ChangeLog的数据集,其中包含两个表:ChangeMaster和ChangeDetail。这两个表由一个int键上的关系连接,只有ChangeDetail在我的问题中起作用。这是一个报告数据集,永远不会驻留在磁盘上的数据库中。
我正在报告审核数据,即记录的更改。有些人可能认为ApexSQL数据表是我的审计源。如果我用我自己的类调用changeDetail替换Entities.ChangeLog.ChangeDetailRow,下面的查询工作正常。但我无法使用原生数据集表ChangeDetailRow。错误发生在我附在'???'中的字段上它说'Entities.ChangeLog.ChangeDetailRow不包含一个带0参数的构造函数'。唯一的参数是(DataRowBuilder rb)。
我可以使用以下命令在C#中为ChangeDetail创建新行:
(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 :(得分:0)
考虑到here的内容,您可能无法以这种方式创建新行。你能简单地省略用'???'包围的部分吗?并尝试:
...
select new
{
PKInfoRequest = data.KEY1,
...
然后,您可以使用.NewRow()
创建行,并用数据填充它们。