Левое внешнее соединение выглядит так в LINQ to SQL
from t1 in fluid
join t2 in fluid on t1.LegacyId + 1 equals t2.LegacyId into t3
from maybeGap in t3.DefaultIfEmpty()
where maybeGap == null
select new { t1 = t1 }
maybeGap
теперь отражает запись, которая является left outer join
из жидкости. Возможно, что поставщик LINQ для SQL Compact ограничен, так как SQL Compact очень ограничен, но в этом его суть.
Вы можете проверить это с помощью этого небольшого теста:
var list = new List<int> { 1, 2, 3, 5 };
var q =
from x in list
join y in list on x + 1 equals y into y
from z in y.DefaultIfEmpty()
where z == 0
select x + 1
;
foreach (var item in q)
Console.WriteLine(item);
Печатает 4
и 6
, просто игнорируйте последнее, поскольку оно всегда будет там, и нет простого способа предотвратить это без использования оконных функций, которые не поддерживаются в SQL Compact.