LINQ查询按对象属性过滤列表并进行多次检查

时间:2014-02-28 11:36:04

标签: c# linq

我有List个对象;我想通过对象的字符串属性中的第一个字母来过滤此列表。

public class MyObject
{
   public string Name { get; set; }
   public MyObject(){}
}

我正在使用LINQ查询:

List<MyObject> myList = FillList();

myList = myList.Where(p => p.Name[0] != "A").ToList();

我的问题是Name的第一个字母可能前面有空格。 Name属性的三个示例:

0 1 2 3 4
N A M E
  N A M E
    N A M

不是从Name删除所有空格,而是可以使用LINQ完成吗?

3 个答案:

答案 0 :(得分:4)

您可以使用TrimStart并暂时删除Name开头的空格并检查第一个字母

myList = myList.Where(p => p.Name.TrimStart(' ')[0] != 'A').ToList();

顺便说一下,您需要使用'A'因为Name[0]char而不是string

答案 1 :(得分:4)

您可以使用TrimStart,请注意字符串是不可变的,因此您不会修改原始字符串。

myList = myList
    .Where(p => !p.Name.TrimStart().StartsWith("A")).ToList();

我正在使用StartsWith因为它很清楚并且还处理空字符串的情况。

答案 2 :(得分:1)

当然可以!在.Where()子句中使用多个检查,la

p.Name[0] != 'A' && p.Name[1] != 'A'... 

或者,更简单地说,使用string.Trim()删除路径G空格:

.Where(p => p.Name.ToString().Trim().StartsWith('A')) `