gpt4 book ai didi

c# - 通过在 where 条件下执行字符串子句来过滤匿名对象列表

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:15 25 4
gpt4 key购买 nike

DOTNETFIDDLE

我已经创建了一个如下所示的匿名对象列表......

List < Object > _dynamicObjectList = new List < Object > ();
for (int i = 0; i < 5; i++) {
_dynamicObjectList.Add(new {
ID = i, Name = "stu" + i, Address = "address234324" + i, DateField = DateTime.Now.AddDays(i)
});
}

现在我需要创建字符串查询。我的字符串查询在下面给出..

string searchStr ="it.ID= 1 || it.ID= 2 || it.Name= "stu1"|| it.Name= "stu2"";

在最后一步中,我将使用上述字符串过滤我的列表...

var returnList= _dynamicObjectList.GetFilteredData(searchStr);

执行动态对象的方法如下...

public static IQueryable GetFilteredData < T > (this IEnumerable < T > source, string searchCriteria) {

if (!string.IsNullOrEmpty(searchCriteria)) {
IList < T > returnList = new List < T > ();
returnList = source.AsQueryable().Where(searchCriteria).ToList();
return returnList.AsQueryable();
} else {
return source.AsQueryable();
}

}

执行过程中系统报错

No property or field 'ID' exists in type 'Object'

最佳答案

<T>Object因为你传递的是 List<Object> ,并且对象上没有您要查找的属性。

如果您的 _dynamicObjectList被声明为这些匿名类型的列表,那么查询可以正常执行,例如,如果您声明 _dynamicObjectList作为:

var _dynamicObjectList = new[] {
new {ID = 0, Name = "stu" + 0, Address = "address234324" + 0, DateField = DateTime.Now.AddDays(0)},
new {ID = 1, Name = "stu" + 1, Address = "address234324" + 1, DateField = DateTime.Now.AddDays(1)},
new {ID = 2, Name = "stu" + 2, Address = "address234324" + 2, DateField = DateTime.Now.AddDays(2)},
new {ID = 3, Name = "stu" + 3, Address = "address234324" + 3, DateField = DateTime.Now.AddDays(3)},
new {ID = 4, Name = "stu" + 4, Address = "address234324" + 4, DateField = DateTime.Now.AddDays(4)},
}.ToList();

更多信息:A generic list of anonymous class

我认为,如果可能的话,您最好的选择是避免使用匿名类型,而只是创建一个类来保存您的数据。

关于c# - 通过在 where 条件下执行字符串子句来过滤匿名对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31041124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com