如何在LINQ查询中获得与ISNULL相同的功能

时间:2016-03-07 16:33:27

标签: c# linq null

我一直试图找到一个解决方案,因为几个小时后,我觉得我的大脑即将帮助。我有以下LINQ查询。

  DropDownListItem item = (
                    from c in context.Practitioners
                    where c.PractitionerID == id
                    select new DropDownListItem
                    {
                        Id = c.PractitionerID,
                        DisplayValue = c.FirstName + " " + c.MiddleName + " " + c.LastName,
                        IsActive = c.IsActive,
                        DisplayOrder = c.PractitionerID,
                        CreatedById = new Guid("COFFEEOO-LOVE-LIFE-LOVE-C0FFEEC0FFEE"),
                        CreatedDate = c.CreatedDate,
                    }).FirstOrDefault() ?? new DropDownListItem();

                response.Data = item;

当c.MiddleName可以为null时,有一些实例。我如何在这个查询中处理它,这样如果c.MiddleName为null我可以只分配一个空白""串到它? 这是我尝试过的,但没有成功的。 - 创建扩展以检查IsNullOrEmpty。我发现这对LINQ查询不起作用。 - 尝试通过执行类似c.MiddleName.ToString()的操作将c.Middle转换为字符串,这也不适用于LINQ查询。 请给我更多关于我应该走向的方向。谢谢!

4 个答案:

答案 0 :(得分:1)

您可以检查空值和空字符串,而不是使用LINQ to Entities不理解的任何方法(Trim将转换为SQL):

DisplayValue = c.FirstName + " " + ((c.MiddleName == null || c.MiddleName.Trim() == string.Empty) ? string.Empty : (c.MiddleName + " ")) + c.LastName,

答案 1 :(得分:1)

我假设你c.MiddleName的意思是空的是c.MiddleName为空(因为如果它是一个空字符串,你的问题没有意义:p)。

如果确实如此,请尝试编写c.MiddleName ?? ""

这意味着如果??的左侧部分为空,则使用表达式的右侧部分

有关更多文档,请参阅https://msdn.microsoft.com/en-us/library/ms173224.aspx

您必须以这种方式更改代码:

 DropDownListItem item = (
                    from c in context.Practitioners
                    where c.PractitionerID == id
                    select new DropDownListItem
                    {
                        Id = c.PractitionerID,
                        DisplayValue = (c.FirstName ?? "") + " " + (c.MiddleName ?? "") + " " + (c.LastName ?? ""),
                        IsActive = c.IsActive,
                        DisplayOrder = c.PractitionerID,
                        CreatedById = new Guid("COFFEEOO-LOVE-LIFE-LOVE-C0FFEEC0FFEE"),
                        CreatedDate = c.CreatedDate,
                    }).FirstOrDefault() ?? new DropDownListItem();

                response.Data = item;

需要注意的是,??运算符具有C#中最低优先级之一。 在C#中查看运营商优先级https://msdn.microsoft.com/en-us/library/6a71f45d.aspx

答案 2 :(得分:1)

我对你的问题有点困惑。你正在创建一个字符串,所以即使c.MiddleName为null,它也应该被解释为一个空字符串。

你也可以试试这个:

     DisplayValue = (c.MiddleName != null) ? 
c.FirstName + " " + c.MiddleName + " " + c.LastName :
c.FirstName + " " + c.LastName,

但几乎所有其他答案都非常相似。

作为备注,您在select new DropDownListItem后面缺少括号,因此可能会出现问题。

答案 3 :(得分:0)

试试这个

 DisplayValue = (c.FirstName?? string.Empty) + " " + (c.MiddleName ?? string.Empty) + " " + (c.LastName?? string.Empty)