出于上下文考虑,我正在从导入到数据库中的多个Excel工作表进行一次数据转换。数据未规范化,我正在尝试对其进行规范化。

我在SQL数据库中有3个表。它们被称为OldAssets,OldTransactions和OldUsers。

OldTransactions有7903条记录。 OldUsers有7437。OldAssets有9764

我正在使用LINQ to SQL使用此代码查询这些表

from oa in OldAssets
from ot in OldTransactions
from u in OldUsers
where (oa.Asset_Serial_Number == ot.Asset_Serial_Number  && ot.User_EID == u.User_EID  && ot.Asset_Tag == oa.Asset_Tag)
select new Transactions {
            DevCenter = ot.Transaction_Dev_Center,
            Action  =   ot.Transaction_Action,
            Status  =   ot.Transaction_Status,
            ModificationDate =  ot.Modified,
            ModifiedBy = ot.ModifiedBy,
            CreatedBy = ot.CreatedBy,
            TransactionDate = (System.DateTime)ot.Transaction_Date,
            Transaction_Asset = (System.Int32)oa.ID,
            Transaction_User = (System.Int32)u.ID }


我尝试遍历所有OldTransactions,并为每个OldTransaction创建一个新交易,该交易基于资产序列号和user_EID的映射来指定Transaction_Asset和Transaction_User。

我的结果是为我提供了超过10,000条新“交易”的记录。我不明白如何获得比我拥有的OldTransactions数量更多的记录。

我可以编写什么查询,该查询将为每个OldTransaction返回一个新的事务,但具有基于serial_number和User_EID的映射的Transaction_Asset和Transaction_User的附加属性?

最佳答案

从您的问题看来,您似乎只想复制带有其他数据的所有交易。我认为这样可以工作:

from ot in OldTransactions
select new Transactions {
        DevCenter = ot.Transaction_Dev_Center,
        Action  =   ot.Transaction_Action,
        Status  =   ot.Transaction_Status,
        ModificationDate =  ot.Modified,
        ModifiedBy = ot.ModifiedBy,
        CreatedBy = ot.CreatedBy,
        TransactionDate = (System.DateTime)ot.Transaction_Date,
        Transaction_Asset = (System.Int32)(
             from oa in OldAssets
             where oa.Asset_Serial_Number == ot.Asset_Serial_Number &&
                   ot.Asset_Tag == oa.Asset_Tag
             select oa.ID).FirstOrDefault(),
        Transaction_User = (System.Int32)(
             from u in OldUsers
             where ot.User_EID == u.User_EID
             select u.ID).
                 FirstOrDefault()) }

关于c# - 为什么LINQ查询返回的结果/行比我查询的表多?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5453682/

10-12 00:33
查看更多