LINQ结果到新的数据集行

时间:2014-02-27 23:02:06

标签: linq dataset visual-studio-2013

我在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>();

1 个答案:

答案 0 :(得分:0)

考虑到here的内容,您可能无法以这种方式创建新行。你能简单地省略用'???'包围的部分吗?并尝试:

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

然后,您可以使用.NewRow()创建行,并用数据填充它们。