sat*_*r V 0 c# linq search list dynamic
假设我有一个List
动态对象,如:
var records = [
{
"Id": 1,
"Name": "sai",
"Age": "4",
"About": "12.02.1991"
},
{
"Id": 2,
"Name": "hjfh",
"Age": "2",
"About": "12.02.1991"
},
{
"Id": 3,
"Name": "hello name",
"Age": "6",
"About": "hi"
},
{
"Id": 4,
"Name": 1,
"Age": "9",
"About": "hello world"
}
]
string searchString = "Hello";
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
foreach (var item in records )
{
foreach (var field in item)
{
if (field.Value != null && field.Value.ToString().IndexOf(query.SearchString, StringComparison.OrdinalIgnoreCase) >= 0)
{
count++;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要记录searchString
中任何字段的记录数.但我可以使用LINQ
查询来写这个吗?
这是您的代码,转换为linq表达式:
您可以访问select语句中的字段和对象.
records.Cast<ExpandoObject>().SelectMany(x => x, (obj, field) => new { obj, field })
.Where(x => x.field.Value != null && x.field.Value.ToString().IndexOf(SearchString, StringComparison.OrdinalIgnoreCase) >= 0)
.Select(x => x.field.Key);
Run Code Online (Sandbox Code Playgroud)
要计算至少包含一个包含searchstring的字段的对象数:
records.Cast<ExpandoObject>()
.Where(x => x.Any(y => y.Value != null && y.Value.ToString().IndexOf(SearchString, StringComparison.OrdinalIgnoreCase) >= 0))
.Count();
Run Code Online (Sandbox Code Playgroud)