我有以下查询,有时ExpirationDate为null会炸毁查询,并且应用程序崩溃。如果ExpirationDate为空,我想为""返回ExpirationDate。如果条件在LINQ中,该如何放置?

List<PData> pressData =
    (from press in dataContext.CPress
        where press.ID.ToString() == this.PressID
        select new PData
        {
            Heading = press.Heading,
            Description = press.MetaDescription,
            DatePublished = press.PublishDate.ToShortDateString(),
            ExpirationDate = press.ExpirationDate.Value.ToShortDateString(),
            Body = press.BodyContent,

            CreatedBy=press.CreatedBy
        }).ToList();


更新:

添加代码乔恩建议我得到以下异常


Could not translate expression 'Table(CPress).Where(press =>

  
  (press.PressID.ToString()=
  调用(value(System.Func`1 [System.String])))))。Select(按
  => new PData(){标题= press.Heading,说明=
  press.MetaDescription,DatePublished =
  press.PublishDate.ToShortDateString(),
  ExpirationDate =
  IIF((press.ExpirationDate = null),“”,
  press.ExpirationDate.Value.ToShortDateString()),
  正文= press.BodyContent,ID =
  press.PressID,CreatedBy =
  press.CreatedBy})'转换为SQL,并可以
  不要将其视为本地表达式。


完全取出ExpirationDate,异常消失

最佳答案

我知道这并不能直接回答您的问题,但是...

如果可能,我将日期保留为DateTime?。通常,您希望在每次显示时都格式化它(ToShortDateString()等),而不是之前。

编辑:在where press.ID.ToString() == this.PressID中类似:this.PressID理想地匹配press.ID的类型。确实,该语言是强类型的,这是有原因的。如果将所有变量都设置为字符串,则将无法实现整个目的。

当然,在某些不寻常的情况下,您可能必须执行此操作,而您可能是其中之一,但是我看不出有这种情况。

关于c# - 在LINQ查询中将字符串设置为“”,其中NULL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5732518/

10-10 22:14