gpt4 book ai didi

c# - 将对象转换为可查询

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

我使用了这个答案的修改版本:How to dynamically create a class in C#?创建表示类型化类的动态对象。

public static object CreateNewObject(string[] columnNames)
{
var myType = CompileResultType(columnNames);
return Activator.CreateInstance(myType) as IQueryable;

}

然后在主应用中:

var obj = MyTypeBuilder.CreateNewObject(rs.ColumnNames);

我需要以某种方式将其转换为 IQueryable,以便我可以对它进行一些 Linq 调用,例如 .where().select() 等。当然,我目前无法这样做,因为我的应用程序不知道该对象中到底是什么,或者该对象是什么。

所以我需要的是:

var obj = MyTypeBuilder.CreateNewObject(rs.ColumnNames);
List<obj> aListICanFill = new List<obj>();

..

aListICanFill.where(x => x.Equals("")).take(3);

我盲目地尝试了不同的转换,甚至未能尝试遍历对象 - 现在我完全卡住了。

有什么办法吗?

http://msdn.microsoft.com/en-us/library/bb882637.aspx似乎是我应该 Hook 的东西。
我的对象是什么样子的:

enter image description here

最佳答案

如果可以使用 List ,则可以使用 Where 和 Select IEnumerable 扩展方法,如下所示。这不适用于 IQueryable,因为这些方法需要一个不能动态的表达式。

using System;
using System.Collections.Generic;
using System.Linq;

namespace DynamicListTest
{
internal class Program
{
private static void Main(string[] args)
{
var dynamicObjects = GetDynamicObjects().Cast<dynamic>().AsEnumerable();

var itemsToPrint = dynamicObjects
.Where(item => item.Age > 30);

foreach (var item in itemsToPrint)
{
Console.WriteLine(item);
}

Console.ReadKey();
}

private static IQueryable GetDynamicObjects()
{
return new List<dynamic>()
{
new { Name = "A", Age = 10 },
new { Name = "B", Age = 20 },
new { Name = "C", Age = 30 },
new { Name = "D", Age = 40 },
new { Name = "E", Age = 50 },
}.AsQueryable();
}
}
}

这打印

{ 姓名 = D,年龄 = 40 }

{ 姓名 = E,年龄 = 50 }

关于c# - 将对象转换为可查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26709829/

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