Linq用字符串替换空白

时间:2018-05-03 06:56:09

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

我在这里有一个linq语句,我在“surname”(u.Surname)字段中得到“null”。我想在返回return语句之前用“blank”关键字替换它。返回不会返回带空格的行。

 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 

你能告诉我怎么做吗?

Error in the following line

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

1 个答案:

答案 0 :(得分:1)

你也有这个textValue约束,将它移到Graph查询会好得多。这将解决源头的null问题。

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

但我不确定如何在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 ));