1

我有两个相同的表。一种是实时数据,另一种是暂存数据。

它们在两列上都具有相同的唯一键约束。

使用 Linq,是否可以获得Production不同的记录列表Staging

该表如下所示:

string name
string number
timespan timeIn
timespan timeOut
.
snip
.
string lastDay

就像我说的那样,两个表是相同的,我只想要列 [after]的记录,name并且与表number中的同一记录不同,Production假设它包含主键。namenumber

编辑

它只是一个带有&&and的长查询!='s吗?

4

2 回答 2

1

结合使用 LINQjoinwhere子句 - 如下所示:

from s in Staging
join p in Production on new {s.name, s.number} equals new {p.name, p.number}
where s.timeIn != p.timeIn || s.timeOut != p.timeOut || s.lastDay != p.lastDay
select s

我只包括了你之后展示的专栏namenumber当然 - 不是你剪掉的那些,但你明白了。

C# Programming Guide提供了有关使用复合键连接的更多信息。

于 2013-05-06T03:50:58.603 回答
0

它们是一个例外子句,它将为您提供生产中的所有记录,除了那些相同的记录,因此生产中的不同之处。请注意,这意味着 Staging 中可能存在不同的记录,但您不会看到它们。J0e3gan 的查询正好相反,只显示与生产不同的暂存记录。

如果你想看到所有的差异,你真的需要运行两次查询,每次都反转,然后合并它们。这与您在 SQL 中使用 EXCEPT 语句的技术相同。

db.production.Except(db.staging);

或者更像

db.production.Except(db.staging).Union( db.staging.Except(db.production) );

请注意,这可能仅在登台和生产的实体类型相同时才有效。您可能需要这样做

db.production.Except(db.staging.Select(s=> new ProductionEntity{ id = s.id, name = s.name, lastDay = s.lastDay ,etc. });
于 2013-05-06T04:09:53.063 回答