【问题标题】:LINQ results to new Dataset RowLINQ 结果到新的数据集行
【发布时间】:2014-02-28 08:16:11
【问题描述】:

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

【问题讨论】:

    标签: linq dataset visual-studio-2013


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,我可以使用 var 和您提出的结构。但是,这意味着我仍然需要将 var 结果复制到 ChangeDetail 表中的额外步骤,就像我创建自己的模仿 ChangeDetail 的类一样。使用 ChangeDetail 的原因是我使用 DevExpress 进行报告,它接受 Master-Detail 关系。我知道定义主从关系的唯一方法是在数据设计器中,因此我最终需要使用 ChangeLog 数据集。
    • 帮不了你了。看来这不是 LINQ 问题,而是 DataRow 问题。我只知道基础知识,在 MSDN 上建议采取额外的步骤,所以如果它有效,我会使用它。稍后优化:)
    • 您提供的链接几乎概括了这种情况。 LINQ to Entities 仅适用于零参数构造函数,而 ADO.NET 数据设计器不会创建这样的构造函数。它创建了那些,我敢说是无用的,不能使用的行生成器参数。
    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多