Linq to SQL Left Соединяется с предложением where, ищущим условие или ноль - PullRequest
0 голосов
/ 20 марта 2020

Мне нужно выбрать записи из 2 таблиц с левым соединением. Эта часть в порядке. Однако в предложении where мне нужно выбрать where t2.fromDate > 20190101 OR t2.fromDate is null.

. Проблема в том, что в c#, t2.fromDate - это int, а не nullable int. Как мне сравнить t2.fromDate с нулем? Я пробовал t2.fromDate == 0, но это не работает, потому что в SQL значение равно нулю, а в C# ожидается, что значение будет int.

int FromDate = 20190101;
var data = (from hi in DbContext.t1
        from fp in DbContext.t2.Where(x => x.DimHierarchyItemKey == hi.Key).DefaultIfEmpty()
        where fp.fromDate >= FromDate || ???

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Две возможности:

  1. Если fp.OrderedDimDateKey может содержать значение NULL в базе данных, оно также должно иметь значение NULL в сущности.

  2. случай, я думаю) Если fp.OrderedDimDateKey не обнуляется в базе данных, единственный способ для него быть нулевым в вашем запросе - это когда нет соответствующей сущности t2. Это означает, что испытание может быть выполнено как

    where fp.OrderedDimDateKey >= FromDate || fp == null
    
0 голосов
/ 22 марта 2020

Ответ оказался проще, чем я ожидал.

int FromDate = 20190101;
var data = (from hi in DbContext.t1
        from fp in DbContext.t2
                .Where(x => x.DimHierarchyItemKey == hi.Key).DefaultIfEmpty()
                .Where(x => x.fromDate>= FromDate).DefaultIfEmpty()
...