在 expandoObject 列表中搜索
本文关键字:搜索 列表 expandoObject | 更新日期: 2023-09-27 18:36:27
假设我有一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";
我尝试了类似的东西:
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;
}
}
}
我想要记录中任何字段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);
要计算至少有一个包含搜索字符串的字段的对象数,请执行以下操作:
records.Cast<ExpandoObject>()
.Where(x => x.Any(y => y.Value != null && y.Value.ToString().IndexOf(SearchString, StringComparison.OrdinalIgnoreCase) >= 0))
.Count();
它会是这样的:逻辑:
var qry = records.Where(x=>x.Field.Contains(searchedstring)).Count();
真实例子:
var qry = records.Where(x=>x.Name.Contains("sai")).Count();
下面是最简单的代码。
int count = records.Count(x => x.Name.StartsWith("hello") || x.About.StartsWith("hello"));