我有以下查询,有时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/