gpt4 book ai didi

c# - 将选定的 T 属性从一个 IQueryable 获取到一个 IQueryable

转载 作者:行者123 更新时间:2023-11-30 14:06:01 44 4
gpt4 key购买 nike

我有一个包含 IQueryable<T> 的通用函数其中每一行都包含一个具有一组属性的类的实例。

我有另一个类 (MyClass),它具有与上面的类 T 相同的一些属性...即相同的名称和数据类型。

我还有一个字符串列表,其中包含两个类之间共享的属性名称。

我希望能够创建一个新的 IQueryable<myClass>其中 myClass 实例属性填充了原始 IQueryable<T> 中的同名属性

这有意义吗?如果我可以提供更多信息或使任何内容更清楚,请告诉我。

编辑我会尝试添加一些代码来更好地说明。我知道这里有无数错误,包括添加到 IQueryable - 但这是为了说明:

IQueryable<T> qry = this.GetSomeDataIntoIQueryable();

// Just getting a list of the Shared Property Names between the two classes
List<string> sharedProprtyNames = new List<string>();
foreach (var item in ListofSharedPropertyNames)
{
sharedProprtyNames .Add(item.SharedPropertyName);
}

IQueryable<myClass> myClassIQ;
foreach(var classItem in qry)
{
myClass x = new myClass();
foreach(var sharedProperty in sharedProprtyNames )
{
myClass[sharedProperty] = classItem[sharedProperty];
}
myClassIQ.Add(myClass);
}

最佳答案

类似于:

static IQueryable<TTo> Select<TFrom, TTo>(
this IQueryable<TFrom> source,
params string[] members)
{
var p = Expression.Parameter(typeof(TFrom));
var body = Expression.MemberInit(
Expression.New(typeof(TTo)),
members.Select(member => Expression.Bind(
typeof(TTo).GetMember(member).Single(),
Expression.PropertyOrField(p, member))));

var lambda = Expression.Lambda<Func<TFrom, TTo>>(body, p);
return source.Select(lambda);
}

?

这会创建一个 IQueryable<T> - 来自 TFrom 的友好投影至 TTo ,尊重来自members的所有成员.

在您的示例中,它将是:

IQueryable<myClass> myClassIQ = qry.Select<T, myClass>(ListofSharedPropertyNames);

(根据您的方便在 members 参数的数组/列表之间进行调整 - 因为我们使用 Select,它可以与任何一个一起使用)

关于c# - 将选定的 T 属性从一个 IQueryable<T> 获取到一个 IQueryable<MyClass>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51400695/

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