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"));
- 在asp.net,C#中保持Fileupload控件的值
- Asp.Net Core 2如何访问ConfigureServices中的IHostingEnvironment?
- 如何使用自定义IHttpModule和HttpRequestfilter修改POST请求?
- WPF默认日期时间格式
- 正则表达式确保在字符串如“05123:12315”中,第一个数字小于第二个?
- EF 4.1 OnModelCreating未调用
- 使用reflection从bin文件夹加载多个dll
- 参考用于CI构建的Microsoft.VisualStudio.QualityTools.UnitTestFramework
- 为DataGridView设置ToolTip会自动创建列