【问题标题】:Linq replace blank with stringLinq用字符串替换空白
【发布时间】:2018-05-03 06:56:09
【问题描述】:

我在这里有一个 linq 语句,我在“姓氏”(u.Surname)字段中得到“null”。我想在点击返回语句之前将其替换为“空白”关键字。否则返回将不会返回带有空白的行。

 var user = await graphClient.Users.Request().GetAsync();
                return JsonConvert.SerializeObject(user.Where(u => !string.IsNullOrEmpty(u.Surname) && ( u.Surname.ToLower().StartsWith(textValue) || u.Surname.ToUpper().StartsWith(textValue.ToUpper()))), Formatting.Indented);

现在

Lastname FirstName email 
          ABC       abc@email.com
Something DEF       def@email.com
          ghg       ghg@email.com 

预期

Lastname FirstName email 
blank     ABC       abc@email.com
Something DEF       def@email.com
blank     ghg       ghg@email.com 

你能告诉我怎么做吗?

var users = user.Select(u => { u.Surname = u.Surname ?? "blank"; return u; });

【问题讨论】:

  • 如果你能提供一个minimal reproducible example 带有样本输入和基于这些样本输入的预期输出,那就太棒了。
  • 我很惊讶你的姓氏是空白的,因为第一个条件是 !string.IsNullOrEmpty(u.Surname)..
  • 如果我删除,代码将中断,因为 u.null

标签: c# .net asp.net-mvc linq collections


【解决方案1】:

你也有这个textValue 约束,把它移到图形查询中会更好。这将在源头上解决空问题。

您可以将您的 3 个 (!) 测试合二为一,u.surname.ToUpper() .StartsWith(textValue.ToUpper()) 您不必检查其他 ToLower() 和中性版本。

但我不确定如何在 MS Graph 中执行此操作。

如果您仍然想在查询后进行过滤:

var user = await graphClient.Users.Request().GetAsync();

var user2 = user
   .Select(u => { u.Surname = u.Surname ?? "blank"; return u; })
   .Where(u => u.surname.ToUpper().StartsWith(textValue.ToUpper())
   ;

return JsonConvert.SerializeObject(user2, Formatting.Indented ));

【讨论】:

  • 类型种姓问题
  • 在你的答案中查看图片
  • @SmartestVEGA 不会编辑答案以包含您在实施它们时遇到的错误。
  • 立即检查 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“Microsoft.Graph.IGraphServiceUsersCollectionPage”。存在显式转换(您是否缺少演员表?)
猜你喜欢
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多