LINQ查询任何属性都包含字符串

如何查询类型T的集合,返回T的所有项,其中任何T的属性包含一些字符串?

编辑:

假设我在检查包含之前将每个属性转换为字符串。

你的意思是这样的?

 list.Any(x => x.GetType() .GetProperties() .Any(p => { var value = p.GetValue(x); return value != null && value.ToString().Contains("some string"); })); 

如果只获取类型和属性一次,这可能会更有效:

 var type = list.GetType().GetGenericArguments()[0]; var properties = type.GetProperties(); var result = list.Any(x => properties .Any(p => { var value = p.GetValue(x); return value != null && value.ToString().Contains("some string"); })); 

注意:如果要检查任何属性是否包含某些字符串,请使用Any ,如果您还希望获得与您的条件匹配的项目,请使用Where方法而不是第一个Any 。 使用list.Where(x => properties.Any(...));

你可以使用reflection(这个版本效率不高,但你已经有了想法)。

 myList.Where(m => m.GetType().GetProperties().Any(x => x.GetValue(m, null) != null && x.GetValue(m, null).ToString().Contains("someString"));