gpt4 book ai didi

c# - 使用动态表达式 API 选择匿名类型

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

我将动态表达式 API (System.Linq.Dynamic) 与 LINQ to Entities 结合使用。我的 LINQ 查询如下。

var query = this.db.Products.AsQueryable()
.Where(strCondition)
.OrderBy("ProductNumber")
.Select("new(ProductNumber, ProductDescription, ProductCategory.Name)");

现在有了“查询”,我不知道如何获取每个字段的值。

string strTemp;
foreach (var item in query)
{
strTemp = item.?
}

它是匿名类型所以我不能真正使用强类型来获取值。我能做些什么?我选择获取匿名类型字段的原因是因为我需要将 ProductCategory.Name 字段放入结果中。有没有更好的方法来使用 Dynamic Expression API 在结果中获取 ProductCategory.Name?谁能帮忙?

最佳答案

处理它的最简单方法是将循环变量声明为动态,因为您没有任何静态类型信息(推断的静态类型是object但它是 DynamicClass 的实例)。

foreach (dynamic item in query)
{
string ProductNumber = item.ProductNumber;
string ProductDescription = item.ProductDescription;
string Name = item.Name;
}

否则你可以手动使用反射。

// static (extension) method to read the property
public static T GetProperty<T>(this DynamicClass self, string propertyName)
{
var type = self.GetType();
var propInfo = type.GetProperty(propertyName);
return (T)propInfo.GetValue(self, null);
}

// usage:
foreach (DynamicClass item in query)
{
// using as an extension method
string ProductNumber = item.GetProperty<string>("ProductNumber");
// or as a static method
string ProductDescription = GetProperty<string>(item, "ProductDescription");
string Name = item.GetProperty<string>("Name");
}

关于c# - 使用动态表达式 API 选择匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4050458/

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