gpt4 book ai didi

c# - 转换从 Linq.Dynamic 返回的对象

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

我正在使用 Linq.Dynamic Library和 EF6。我试图仅从我的用户选择的数据库中选择字段。

但是,所有返回的都是 List<object> , 我曾尝试 Cast<dynamic> , 以及我能想到的每一种方式,但无论什么对象都有 0 个字段。

我也试过明确声明为 IEnumerable那也不成功,无法调用.ToList() , 无需先调用 Cast<T>这也没有成功。

将其中一个对象转换为 string 时我得到:"{filenumber=345400, custom2=, custom3=, custom6=4076995332, custom8=4072121417}" .

正在返回数据,我根本无法将其转换为适当的类型。

var query = cmax.dbases
.Where(w => statuses.Any(a => w.statusname == a) && portfolios.Any(a => w.portfolio == a))
.Select(string.Format("new ({0})", string.Join(",", fields)))
.Take(Math.Min((int) takeAmount, count - taken));

var take = await query.ToListAsync();

take.ForEach(data => {
var type = take.GetType();
var properties = type.GetProperties();
var propCount = properties.Count();
properties.ToList().ForEach(prop => {
var name = prop.Name;
});
});

最佳答案

在我的一个用例中,我将结果转换为 List<string[]>通过 IQueryable 的扩展。因为我知道我在 Select("New (columnNames...) ") 中的列顺序,所以我可以很容易地找出哪个是哪个。

这是扩展的代码

public static IList<string[]> ToStringArray(this IQueryable queryFinal)
{
var query = (IQueryable<dynamic>)queryFinal;
IList<dynamic> data = query.ToList();
System.Reflection.PropertyInfo[] props = null;
if (data.Count > 0) props = data[0].GetType().GetProperties();
if (props == null) return new List<string[]>();
/*I do other things using reflection here*/
return data.Select(d => props.Select(p => (p.GetValue(d, null) ?? string.Empty).ToString()).OfType<string>().ToArray()).ToList();
}

用作

var result = query.ToStringArray();

关于c# - 转换从 Linq.Dynamic 返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29950927/

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