2013-03-14 143 views
3

我的任务是为Automapper创建LINQ表达式,该表达式必须能够转换为SQL表达式。这意味着没有方法调用,这是我遇到问题的地方。NULL在LINQ表达式中检查SQL

我有两列感兴趣的记录 - ProposedStartDateActualStartDate。如果它存在,我想获得ActualStartDate,如果为空则获取ProposedStartDate

 .ForMember(d => d.StartDate, opt => opt.MapFrom(s => (from foo in s.foo 
                  orderby foo.ProposedStartDate ascending 
                  select foo.ProposedStartDate).LastOrDefault())) 

到目前为止,我在那里,但我不确定如何检查空值和安全的方式拉ActualStartDate。任何帮助都会很棒。

谢谢。

+0

'x.Foo!= null' – Aron 2013-03-14 10:50:20

回答

6

只需使用??运算符。它被转换成SQL端上的COALESCE

.ForMember(d => d.StartDate, opt => opt.MapFrom(s => (from foo in s.foo 
                 orderby foo.ActualStartDate??foo.ProposedStartDate ascending 
                 select foo.ActualStartDate??foo.ProposedStartDate).LastOrDefault())) 
+0

那很容易!我以为 ??和? :操作不起作用。 – Tim 2013-03-14 11:15:44