我需要从一个表中选择其他表中不存在的行。但是,我无法加入ID
,因为这些表来自不同的数据库。
我对每个数据库都有一个上下文,并使用以下C#代码获取数据:
var forecastRows = targetContext.Forecasts.ToList();
var actualRows = sourceContext.Actual.ToList()
.Select(actual => new
{
TargetMonth = DateTimeExtensions.GetMonthCode(actual.Date.Year, actual.Date.Month),
CustomerCode = actual.CustomerGroupNo,
actual.Brand
});
然后,我定义变量以从Forecasts
表中获取行,而这些行在Actual
表中不存在:
var orphanActualRows = forecastRows.Where(row =>
!actualRows.Any(f => f.Brand == row.Brand.Code
&& f.CustomerCode == row.Customer.Code
&& f.TargetMonth == row.TargetMonth));
但是它不能正常工作。它返回Forecasts
表的总数。但这是不准确的,因为行数要少得多...
答案 0 :(得分:-1)
我认为这种加入可以为您提供帮助。
var orpahanActualRows = targetContext.Forecast.Join(
sourceContext.Actual,
forecastRows => new { forecastRows.Brand, forecastRows.CustomerCode, forecastRows.TargetMonth },
actualRows => new { actualRows.Brand, actualRows.CustomerGroupNo, actualRows.Date.Year, actualRows.Date.Month},
(forecastRows, actualRows) => new { f = forecastRows, rows=actualRows })
.Where(d => d.rows.Brand.Code != d.f.Brand
&& d.rows.CustomerCode != d.f.CustomerCode
&& rows.TargetMonth != DateTimeExtensions.GetMonthCode(rows.Date.Year, rows.Date.Month))
.Select(d => d.f)
.ToList();