为了上下文的缘故,我正在从一些导入到数据库的Excel工作表中进行1次数据转换。数据未规范化,我试图对其进行规范化。为什么LINQ查询返回比我查询的表更多的结果/行?
我在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返回一个新的Transaction,但是基于Serial_number和User_EID的映射添加了Transaction_Asset和Transaction_User的属性?
...因此交易可能会在结果集重复时,它已经超过1个用户/资产组合 – MikeM 2011-03-28 01:34:43
@mdmullinax你说,它完美。 – 2011-03-28 01:37:51
@ ilya-kogan和@mdmullinax - 我希望更新了我的问题,使其更加简洁。我想知道如何根据序列号和UserEID为每个OldTransaction生成一个新的单个事务。 – 2011-03-28 01:50:06