C# 将字符串设置为"&引用;在LINQ查询中,其中NULL
我有以下查询,有时C# 将字符串设置为"&引用;在LINQ查询中,其中NULL,c#,.net,linq,C#,.net,Linq,我有以下查询,有时ExpirationDate为空,这会导致查询中断,应用程序崩溃。如果ExpirationDate为空,我想返回ExpirationDate的“。如何在LINQ中设置此if条件 List<PData> pressData = (from press in dataContext.CPress where press.ID.ToString() == this.PressID select new PData
ExpirationDate
为空,这会导致查询中断,应用程序崩溃。如果ExpirationDate
为空,我想返回ExpirationDate
的“
。如何在LINQ中设置此if条件
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();
(press.PressID.ToString()=
调用(值(System.Func`1[System.String])。选择(按)
=>新建PData(){Heading=press.Heading,Description=
press.MetaDescription,DatePublished=
按.PublishDate.ToSortDateString(),
到期日=
IIF((press.ExpirationDate=null),“”,
按.ExpirationDate.Value.ToShortDateString()),
Body=press.BodyContent,ID=
press.PressID,由创建=
将.CreatedBy})按入SQL并可以
不要将其视为局部表达式
将ExpirationDate完全删除例外情况会消失我会使用:
ExpirationDate = press.ExpirationDate == null ? "":
press.ExpirationDate.Value.ToShortDateString()
编辑:话虽如此,它只能解决眼前的问题。我同意Nelson将其保留为
日期时间?
并在显示时间执行转换的方法。除此之外,这意味着您可以在此时为用户应用适当的文化信息等。我知道它不会直接回答您的问题,但是
如果可能,我会将日期保留为DateTime?
。通常,只要显示它,就要格式化它(toSortDateString()
,等等),而不是在之前
编辑:类似地,在中,press.ID.ToString()==this.PressID
:this.PressID
将与press.ID
的类型匹配。实际上,这种语言是强类型的是有原因的。如果将所有变量都设置为字符串,则会破坏整个目的
当然,在某些不寻常的情况下,您可能不得不这样做,而您的可能就是其中之一,但我看不出有任何迹象表明情况确实如此。就我个人而言,我会选择@Jon Skeet建议的选项,但如果您不喜欢语法,另一种选择是编写一个扩展方法并调用它
public static string ToShortDateStringOrEmpty(this DateTime? dt)
{
if (dt == null)
return String.Empty;
else
return dt.ToShortDateString();
}
如果您正在执行复杂的查询(例如,如果顺序不为空,则显示所有行项目的总和)并遍历许多对象,则此操作的优点是更整洁。使用if-then语法而不是速记是否合法?@Nick:如果要将其转换为表达式树,则不会,不。这对LINQ to SQL等不起作用,因为它不知道。没错,如果你想这样做的话,你必须在上一次返回中有一个AsEnumerable,但是你会在客户端而不是服务器上拥有所有数据。我使用绑定语法将值绑定到控件。如何在DateTime类型的东西上使用绑定语法?Text=''@Nick:您可以指定格式字符串。例如:
@Nick:以下是不同的格式选项:在左侧菜单上,您可以深入查看标准和自定义日期时间选项。
public static string ToShortDateStringOrEmpty(this DateTime? dt)
{
if (dt == null)
return String.Empty;
else
return dt.ToShortDateString();
}