条件运算符没有评估两次?

Mar*_*cus 3 c# conditional conditional-operator

说我有以下内容:

MyDate = 
  (db.MyTables.FirstOrDefault(x => x.MyID == idToFind).DateValue == DateTime.MinValue) 
    ? DateTime.Now 
    : db.MyTables.FirstOrDefault(x => x.MyID == idToFind).DateValue
Run Code Online (Sandbox Code Playgroud)

如果没有运行两次LINQ查询,有没有办法做到这一点?
我不能先将它运行到temp变量中,因为这个查询本身就是一个更大的LINQ查询的一部分.

Bro*_*ass 7

我不能先将它运行到temp变量中,因为这个查询本身就是一个更大的LINQ查询的一部分.

您可以let在查询中使用赋值(或者,如果您使用lambda语法,则可以使用包含辅助字段的投影 - 无论如何它都会被编译):

var query = from foo in db.Bar
            let bar = db.MyTables.FirstOrDefault(x => x.MyID == idToFind).DateValue
            select  new 
            {
               MyDate = bar == DateTime.MinValue ? DateTime.Now : bar
            }
Run Code Online (Sandbox Code Playgroud)