Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串设置为"&引用;在LINQ查询中,其中NULL_C#_.net_Linq - Fatal编程技术网

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();
}