我一直试图找到一个解决方案,因为几个小时后,我觉得我的大脑即将帮助。我有以下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查询。 请给我更多关于我应该走向的方向。谢谢!
答案 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)