将字符串设置为“”在一个LINQ查询中NULL NULL
我有以下查询,有时ExpirationDate
为空,这会导致查询和应用程序崩溃。如果ExpirationDate
为空,我想为ExpirationDate
返回""
。如何在LINQ中添加此条件?将字符串设置为“”在一个LINQ查询中NULL NULL
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();
UPDATE:
添加代码乔恩建议我得到下面的异常
Could not translate expression 'Table(CPress).Where(press =>
(press.PressID.ToString()= 调用(值(System.Func` 1 [System.String]))))。Select(press => new PData(){Heading = press.Heading,Description = press.MetaDescription,DatePublished = press.PublishDa te.ToShortDateString(), 到期日期= IIF((press.ExpirationDate = NULL) “”, press.ExpirationDate.Value.ToShortDateString()), 车身= press.BodyContent,ID = press.PressID,CreatedBy = press.CreatedBy})'到SQL,并可能 不把它当作本地表达式。
以到期日期出完全例外消失
我知道这不回答你直接的问题,但...
如果可能的话,我会保持日期DateTime?
。通常你想要格式化它(ToShortDateString()
等),只要你显示它,而不是之前。
编辑:同样在where press.ID.ToString() == this.PressID
:this.PressID
将理想地匹配press.ID
类型。真的,这种语言是强烈类型的原因。如果你让所有的变量都是字符串,它就会失去整个目的。
当然,也有一些不寻常的情况下,您可能不得不这样做,你可能是其中之一,但我看不出有任何迹象表明,是这种情况。
我会使用:
ExpirationDate = press.ExpirationDate == null ? "":
press.ExpirationDate.Value.ToShortDateString()
编辑:说了这么多,那就只能解决眼前的问题。我同意尼尔森将其保留为DateTime?
并在显示时间进行转换的方法。除此之外,这意味着您可以在此时为用户应用适当的文化信息等。
如果使用语法而不是简写法,是否合法? – 2011-04-20 15:12:46
@Nick:如果这将被转换为表达式树,则不会。 – 2011-04-20 15:23:46
个人而言,我会去为@乔恩飞碟双向曾建议的选项,而是一个选择,如果你不喜欢的语法编写扩展方法,并调用该
public static string ToShortDateStringOrEmpty(this DateTime? dt)
{
if (dt == null)
return String.Empty;
else
return dt.ToShortDateString();
}
这样做的好处如果你正在做一个复杂的查询(例如,如果订单不为空,请显示所有订单项的总和)并遍历大量对象,那么它们会更整洁。
虽然这不适用于LINQ to SQL等,因为它不知道它。 – 2011-04-20 15:24:52
的确如此,如果你想这样做,你必须在前一次返回时拥有一个AsEnumerable,但是你将拥有客户端而不是服务器上的所有数据。 – 2011-04-20 15:32:59
我正在使用绑定语法将值绑定到控件。如何在DateTime类型的东西上使用绑定语法? – 2011-04-20 15:33:20
Text ='' – 2011-04-20 15:35:09
@Nick:您可以指定格式字符串。例如:' – 2011-04-20 15:40:09