Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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查询中获得与ISNULL相同的功能_C#_Linq_Null - Fatal编程技术网

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

C# 如何在LINQ查询中获得与ISNULL相同的功能,c#,linq,null,C#,Linq,Null,从几小时前开始,我就一直在努力寻找解决办法,我觉得我的大脑即将有所帮助。我有下面的LINQ查询 DropDownListItem item = ( from c in context.Practitioners where c.PractitionerID == id select new DropDownListItem {

从几小时前开始,我就一直在努力寻找解决办法,我觉得我的大脑即将有所帮助。我有下面的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可能为空时,会出现不稳定。我如何在这个查询中处理它,以便如果c.MiddleName为null,我可以为它分配一个空白的“”字符串? 以下是我已经尝试过但没有成功的方法。 -已创建用于检查IsNullOrEmpty的扩展名。我发现这对LINQ查询不起作用。 -尝试通过执行类似于c.MiddleName.ToString()的操作将c.Middle转换为字符串,这对LINQ查询也不起作用。
请给我更多的方向,我应该朝哪个方向走。谢谢

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


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

如果确实如此,试着写
c.MiddleName??“”

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

有关更多文档,请参阅

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

 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#中的操作员优先级此处

试试这个

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

我对你的问题有点困惑。您正在生成一个字符串,因此即使
c.MiddleName
为空,也应将其解释为空字符串

您也可以尝试以下方法:

     DisplayValue = (c.MiddleName != null) ? 
c.FirstName + " " + c.MiddleName + " " + c.LastName :
c.FirstName + " " + c.LastName,
但几乎所有其他答案都非常相似


请注意,您在选择新的DropDownlitItem后缺少括号,所以这可能是个问题。

我使用了您的建议。现在它只返回姓氏。我看到的这个人有名字和姓氏,没有中间名。所以我希望显示值是first和last name。很抱歉,我想说它现在只返回FirstName。没有姓,即使此人有姓,也应该是
(c.FirstName??)+“(c.MiddleName??)+“(c.LastName??)+”+(c.LastName??)
。现在它与
c.FirstName??(“+”+c.MiddleName??(“+”+c.LastName??)
如果格式很重要,当没有中间名时,名字和姓氏之间会有两个空格。@juharr谢谢,混淆了我的操作员的优先级,更正了建议的代码:)并添加了一些文档来解释为什么会出现这样的异常无法将类型“System.Boolean”强制转换为类型“System.Object”。LINQ to Entities仅支持强制转换EDM基元或枚举类型。“谢谢@sarvana。编辑后它工作得非常好!!这也可以工作:DisplayValue=(c.FirstName??string.Empty)++“”(c.MiddleName??string.Empty)++“”(c.LastName??string.Empty)这只是返回名字,即使该记录有姓氏。如果该记录列出了姓氏,我希望使用姓氏和姓氏。查询似乎是EF。这意味着它将被转换为SQL,其中串联
null
字符串值的行为将不同于在C#中的行为。此外,您不需要括号
()
使用对象初始值设定项时。
     DisplayValue = (c.MiddleName != null) ? 
c.FirstName + " " + c.MiddleName + " " + c.LastName :
c.FirstName + " " + c.LastName,